@preventive/triage 1.0.0-alpha.39 → 1.0.0-alpha.40

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.
@@ -1 +1 @@
1
- import{b as P}from"./chunk-NRPC74AM.js";import{a as b,d as x,f as h,h as y}from"./chunk-W4J3MGLB.js";import{d as B}from"./chunk-PNHBZGDD.js";import{a as g,b as d}from"./chunk-ZPD5R5RP.js";import{c as O}from"./chunk-HIV7SVI7.js";import{C as k,D as R,G as S,J as I,K as N,L as M,O as m,q as _}from"./chunk-GNXOKIGP.js";import{a as v}from"./chunk-TUII34K2.js";var H=["inprogress","fixed","invalid","deleted","ignored"];function Q(e){return typeof e=="string"&&H.includes(e)}function ue(e){if(e===null)return null;if(typeof e!="object"||Array.isArray(e))return"invalid";let r=e,n={},t=r.color;if(t!=null){if(typeof t!="string"||t.length>50)return"invalid";t!==""&&(n.color=t)}let o=r.triage;if(o!=null){if(!Q(o))return"invalid";n.triage=o}for(let a of["comment","fix"]){let c=r[a];if(c!=null){if(typeof c!="string"||c.length>1e4)return"invalid";c!==""&&(n[a]=c)}}let s=r.flagged;if(s!=null){if(typeof s!="boolean")return"invalid";n.flagged=s}return n}function ge(e,r){let n=d([{groups:[e],tree:r.tree}]);for(let t of e)k(t,r),t.isApp??=_(t,t.source??r.source),t._depsDirectory=n}function w(e,r){return!(e.isApp??_(e,e._source??e.source))&&g(e.file,e._depsDirectory??r??d([{groups:[[e]]}]))}function ye(e,r,n){let t=b(r);return t==="ignored"&&w(e,n)?void 0:t}function we(e,r,n,t){let o=r.id??String(r._id),s=r._reportName??"";w(r,t)&&(n==="ignored"||n==="untriaged")?(b(e.get(o))!=="ignored"&&h(e,o,{triage:void 0}),y(e,o,s,n==="ignored",!0)):(h(e,o,{triage:n==="untriaged"?void 0:n}),n!=="ignored"&&n!=="untriaged"&&y(e,o,s,!1))}function Z(e,r){if(![...e.values()].some(t=>t?.ignoredReports?.length))return!1;let n=!1;for(let t of r){let o=d([t]),s=(t.groups??[]).flat(),a=i=>({...i,_source:i._source??i.source??t.source}),c=new Set(s.filter(i=>w(a(i),o)).map(i=>i.id??String(i._id)));for(let i of s){let l=i.id??String(i._id),p=i._reportName??t.name??t.fileName??"",A=e.get(l);A?.ignoredReports?.includes(p)&&(x(A,p)||w(a(i),o)||(b(A)||(n=h(e,l,{triage:"ignored"})||n),c.has(l)||(n=y(e,l,p,!1)||n)))}for(let i of s){if(!w(a(i),o))continue;let l=i.id??String(i._id),p=i._reportName??t.name??t.fileName??"";e.get(l)?.ignoredReports?.includes(p)&&(n=y(e,l,p,!0,!0)||n)}}return n}async function ee(e,r){let n=new Set(Object.values(e??{}).flatMap(o=>Array.isArray(o?.ignoredReports)?o.ignoredReports.filter(s=>typeof s=="string"&&!x(o,s)):[])),t=[];for(let o of n){let s;try{let a=await r(o);if(typeof a!="string")continue;s=await m(a)}catch{continue}s&&t.push({...s.data,name:o,groups:[s.findings]})}return t}async function me(e,r){if(e!=null&&(typeof e!="object"||Array.isArray(e)))return{entries:e,changed:!1};let n=new Map(Object.entries(e??{})),t=await ee(e,r),o=Z(n,t);return{entries:Object.fromEntries(n),changed:o}}var T=1,f=16,D=12,L=1+f+D+16,u=1+f+D;async function F(e,r){let n=await crypto.subtle.importKey("raw",v(e),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:r,iterations:3e6},n,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}function X(e){return!(e instanceof Uint8Array)||e.length<L?!1:e[0]===T}async function W(e,r){if(!(e instanceof Uint8Array))throw new TypeError("encryptWithPassword: plaintext Uint8Array required");if(typeof r!="string"||!r)throw new TypeError("encryptWithPassword: password required");let n=new Uint8Array(u+e.length+16);n[0]=T,crypto.getRandomValues(n.subarray(1,1+f)),crypto.getRandomValues(n.subarray(1+f,u));let t=n.subarray(1,1+f),o=n.subarray(1+f,u),s=await F(r,t),a=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:o,additionalData:n.subarray(0,u)},s,e));return n.set(a,u),n}async function ne(e,r){if(typeof r!="string"||!r)throw new TypeError("tryDecryptWithPassword: password required");if(!(e instanceof Uint8Array)||e.length<L)return{ok:!1,reason:"malformed"};if(e[0]!==T)return{ok:!1,reason:"malformed"};let n=e.subarray(1,1+f),t=e.subarray(1+f,u),o=e.subarray(u),s=await F(r,n),a;try{a=new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:t,additionalData:e.subarray(0,u)},s,o))}catch{return{ok:!1,reason:"wrong-password"}}return{ok:!0,plaintext:a}}async function U(e,r,n){if(!n||typeof n.malformedMsg!="string"||typeof n.wrongPasswordMsg!="string")throw new TypeError("decryptWithPasswordOrThrow: { malformedMsg, wrongPasswordMsg } strings required");let t=await ne(e,r);if(t.ok)return t.plaintext;throw t.reason==="wrong-password"?new Error(n.wrongPasswordMsg):new Error(n.malformedMsg)}var K=X,Be=W;function j(e,r){return U(e,r,{malformedMsg:"malformed encrypted bundle",wrongPasswordMsg:"wrong password or corrupt bundle"})}var te=1,C=1024,G=1024,E=200,J=100*1024*1024,oe=Math.ceil(J*4/3)+16,$=512,z=64;function se(e){if(!e||typeof e!="object")return"payload is not an object";if(e.version!==te)return`unsupported export version: ${e.version}`;if(!e.workspace||typeof e.workspace!="object")return"workspace metadata missing";if(typeof e.workspace.id!="string")return"workspace.id must be a string";if(typeof e.workspace.name!="string")return"workspace.name must be a string";if(typeof e.workspace.privateKey!="string")return"workspace.privateKey must be a string";if(e.workspace.createdAt!==void 0&&!Number.isFinite(e.workspace.createdAt))return"workspace.createdAt must be a finite number or omitted";if(!Array.isArray(e.reports))return"reports field must be an array";if(e.reports.length>G)return`reports count (${e.reports.length}) exceeds cap (${G})`;if(e.bundles!==void 0){if(!Array.isArray(e.bundles))return"bundles field must be an array when present";if(e.bundles.length>C)return`bundles count (${e.bundles.length}) exceeds cap (${C})`;for(let r of e.bundles){if(typeof r!="string")return"bundles entries must be strings";if(r.length>E)return`bundle integrity exceeds per-entry length cap (${E})`}}if(e.bundleBlobs!==void 0){if(!Array.isArray(e.bundleBlobs))return"bundleBlobs field must be an array when present";if(e.bundleBlobs.length>z)return`bundleBlobs count (${e.bundleBlobs.length}) exceeds cap (${z})`;for(let r of e.bundleBlobs){if(!r||typeof r!="object"||Array.isArray(r))return"bundleBlobs entries must be objects";if(typeof r.integrity!="string"||r.integrity.length===0)return"bundleBlobs.integrity must be a non-empty string";if(r.integrity.length>E)return`bundleBlobs.integrity exceeds per-entry length cap (${E})`;if(typeof r.name!="string"||r.name.length===0)return"bundleBlobs.name must be a non-empty string";if(r.name.length>$)return`bundleBlobs.name exceeds per-entry length cap (${$})`;if(r.name.includes("\0"))return"bundleBlobs.name cannot contain NUL";if(typeof r.data!="string")return"bundleBlobs.data must be a base64 string";if(r.data.length>oe)return`bundleBlobs.data exceeds per-blob size cap (${J} bytes raw)`}}return null}async function Se(e){return new Uint8Array(await e.arrayBuffer())}async function Ie(e,r){if(K(e)){if(typeof r!="string"||!r)throw new TypeError("parseWorkspaceBundleBytes: password required for encrypted bundle");let t=await j(e,r);try{return q(await B(t))}catch(o){throw new Error("wrong password or corrupt bundle",{cause:o})}}let n;try{n=await B(e)}catch(t){throw new Error(`gzip decompression failed: ${t.message}`,{cause:t})}return q(n)}function q(e){let r;try{r=JSON.parse(e)}catch(o){throw new Error(`payload is not JSON: ${o.message}`,{cause:o})}let n=se(r);if(n===null)return r;let t=n.includes("exceeds cap");throw new Error(t?n:`not a deepview workspace export: ${n}`)}var ve="links";function ie(e){if(typeof e=="string")return e.length>0?e:null;if(!e||typeof e!="object"||Array.isArray(e))return null;let{id:r}=e;return typeof r=="string"&&r.length>0?r:null}function V(e){let r;try{r=JSON.parse(e)}catch{return null}if(!Array.isArray(r)||r.length===0)return null;let n=[],t=0;for(let o of r){if(!Array.isArray(o))return null;let s=new Set;for(let a of o){let c=ie(a);if(c===null)return null;O(c)?s.add(c):t++}s.size>1&&n.push([...s])}return{groups:n,skipped:t}}function Oe(e){let r=new Set;for(let n of e)for(let t of n)r.add(t);return r.size}function Pe(e,r){for(let n of e)for(let t of n){let o=r.get(t);o||r.set(t,o=new Set);for(let s of n)s!==t&&o.add(s)}return r}function ae(e,r){let n=e.trimStart().startsWith("[")?V(e):null;if(n)return{data:{source:"links",findings:[],links:n.groups},format:"links",reason:null};let t=M(e);if(t.data!=null||N(e,r)!=="codex")return t;try{return{data:{type:"security",source:"codex-security",findings:S(e).flatMap(s=>s.data.findings)},format:"codex",reason:null}}catch(o){return{data:null,format:null,reason:o instanceof Error?o.message:"Invalid Codex CSV"}}}function Ue(e,r){let n=ae(e,r);return n.data==null?Promise.resolve(null):m(JSON.stringify(n.data))}function ce(e){let r=new Set;for(let n of e){if(!n||typeof n!="object")continue;let t=n;typeof t.file=="string"&&t.file&&r.add(t.file);for(let o of Array.isArray(t.evidence)?t.evidence:[])typeof o?.file=="string"&&o.file&&r.add(o.file)}return r}function Y(e){let r=(I(e)??[]).flat().filter(t=>t!=null&&typeof t=="object"),n=d([{groups:[r],tree:e?.tree}]);return{directory:n,own:r.filter(t=>!g(t.file,n))}}function Ke(e){let r=new Map;for(let n of Y(e).own){let t=R(n);t&&r.set(t.toLowerCase(),t)}return r.size===1?[...r.values()][0]:null}function je(e){let{directory:r,own:n}=Y(e);return P([...ce(n)].filter(t=>!g(t,r)))}export{ge as a,w as b,ye as c,we as d,Z as e,ee as f,me as g,W as h,U as i,K as j,Be as k,G as l,Se as m,Ie as n,q as o,ve as p,V as q,Oe as r,Pe as s,ae as t,Ue as u,Ke as v,je as w,ue as x};
1
+ import{b as P}from"./chunk-NRPC74AM.js";import{a as b,d as x,f as h,h as y}from"./chunk-W4J3MGLB.js";import{d as B}from"./chunk-PNHBZGDD.js";import{a as g,b as d}from"./chunk-4F6JSF57.js";import{c as O}from"./chunk-WZDTZE64.js";import{C as k,D as R,G as S,J as I,K as N,L as M,O as m,q as _}from"./chunk-GNXOKIGP.js";import{a as v}from"./chunk-TUII34K2.js";var H=["inprogress","fixed","invalid","deleted","ignored"];function Q(e){return typeof e=="string"&&H.includes(e)}function ue(e){if(e===null)return null;if(typeof e!="object"||Array.isArray(e))return"invalid";let r=e,n={},t=r.color;if(t!=null){if(typeof t!="string"||t.length>50)return"invalid";t!==""&&(n.color=t)}let o=r.triage;if(o!=null){if(!Q(o))return"invalid";n.triage=o}for(let a of["comment","fix"]){let c=r[a];if(c!=null){if(typeof c!="string"||c.length>1e4)return"invalid";c!==""&&(n[a]=c)}}let s=r.flagged;if(s!=null){if(typeof s!="boolean")return"invalid";n.flagged=s}return n}function ge(e,r){let n=d([{groups:[e],tree:r.tree}]);for(let t of e)k(t,r),t.isApp??=_(t,t.source??r.source),t._depsDirectory=n}function w(e,r){return!(e.isApp??_(e,e._source??e.source))&&g(e.file,e._depsDirectory??r??d([{groups:[[e]]}]))}function ye(e,r,n){let t=b(r);return t==="ignored"&&w(e,n)?void 0:t}function we(e,r,n,t){let o=r.id??String(r._id),s=r._reportName??"";w(r,t)&&(n==="ignored"||n==="untriaged")?(b(e.get(o))!=="ignored"&&h(e,o,{triage:void 0}),y(e,o,s,n==="ignored",!0)):(h(e,o,{triage:n==="untriaged"?void 0:n}),n!=="ignored"&&n!=="untriaged"&&y(e,o,s,!1))}function Z(e,r){if(![...e.values()].some(t=>t?.ignoredReports?.length))return!1;let n=!1;for(let t of r){let o=d([t]),s=(t.groups??[]).flat(),a=i=>({...i,_source:i._source??i.source??t.source}),c=new Set(s.filter(i=>w(a(i),o)).map(i=>i.id??String(i._id)));for(let i of s){let l=i.id??String(i._id),p=i._reportName??t.name??t.fileName??"",A=e.get(l);A?.ignoredReports?.includes(p)&&(x(A,p)||w(a(i),o)||(b(A)||(n=h(e,l,{triage:"ignored"})||n),c.has(l)||(n=y(e,l,p,!1)||n)))}for(let i of s){if(!w(a(i),o))continue;let l=i.id??String(i._id),p=i._reportName??t.name??t.fileName??"";e.get(l)?.ignoredReports?.includes(p)&&(n=y(e,l,p,!0,!0)||n)}}return n}async function ee(e,r){let n=new Set(Object.values(e??{}).flatMap(o=>Array.isArray(o?.ignoredReports)?o.ignoredReports.filter(s=>typeof s=="string"&&!x(o,s)):[])),t=[];for(let o of n){let s;try{let a=await r(o);if(typeof a!="string")continue;s=await m(a)}catch{continue}s&&t.push({...s.data,name:o,groups:[s.findings]})}return t}async function me(e,r){if(e!=null&&(typeof e!="object"||Array.isArray(e)))return{entries:e,changed:!1};let n=new Map(Object.entries(e??{})),t=await ee(e,r),o=Z(n,t);return{entries:Object.fromEntries(n),changed:o}}var T=1,f=16,D=12,L=1+f+D+16,u=1+f+D;async function F(e,r){let n=await crypto.subtle.importKey("raw",v(e),"PBKDF2",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",hash:"SHA-256",salt:r,iterations:3e6},n,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}function X(e){return!(e instanceof Uint8Array)||e.length<L?!1:e[0]===T}async function W(e,r){if(!(e instanceof Uint8Array))throw new TypeError("encryptWithPassword: plaintext Uint8Array required");if(typeof r!="string"||!r)throw new TypeError("encryptWithPassword: password required");let n=new Uint8Array(u+e.length+16);n[0]=T,crypto.getRandomValues(n.subarray(1,1+f)),crypto.getRandomValues(n.subarray(1+f,u));let t=n.subarray(1,1+f),o=n.subarray(1+f,u),s=await F(r,t),a=new Uint8Array(await crypto.subtle.encrypt({name:"AES-GCM",iv:o,additionalData:n.subarray(0,u)},s,e));return n.set(a,u),n}async function ne(e,r){if(typeof r!="string"||!r)throw new TypeError("tryDecryptWithPassword: password required");if(!(e instanceof Uint8Array)||e.length<L)return{ok:!1,reason:"malformed"};if(e[0]!==T)return{ok:!1,reason:"malformed"};let n=e.subarray(1,1+f),t=e.subarray(1+f,u),o=e.subarray(u),s=await F(r,n),a;try{a=new Uint8Array(await crypto.subtle.decrypt({name:"AES-GCM",iv:t,additionalData:e.subarray(0,u)},s,o))}catch{return{ok:!1,reason:"wrong-password"}}return{ok:!0,plaintext:a}}async function U(e,r,n){if(!n||typeof n.malformedMsg!="string"||typeof n.wrongPasswordMsg!="string")throw new TypeError("decryptWithPasswordOrThrow: { malformedMsg, wrongPasswordMsg } strings required");let t=await ne(e,r);if(t.ok)return t.plaintext;throw t.reason==="wrong-password"?new Error(n.wrongPasswordMsg):new Error(n.malformedMsg)}var K=X,Be=W;function j(e,r){return U(e,r,{malformedMsg:"malformed encrypted bundle",wrongPasswordMsg:"wrong password or corrupt bundle"})}var te=1,C=1024,G=1024,E=200,J=100*1024*1024,oe=Math.ceil(J*4/3)+16,$=512,z=64;function se(e){if(!e||typeof e!="object")return"payload is not an object";if(e.version!==te)return`unsupported export version: ${e.version}`;if(!e.workspace||typeof e.workspace!="object")return"workspace metadata missing";if(typeof e.workspace.id!="string")return"workspace.id must be a string";if(typeof e.workspace.name!="string")return"workspace.name must be a string";if(typeof e.workspace.privateKey!="string")return"workspace.privateKey must be a string";if(e.workspace.createdAt!==void 0&&!Number.isFinite(e.workspace.createdAt))return"workspace.createdAt must be a finite number or omitted";if(!Array.isArray(e.reports))return"reports field must be an array";if(e.reports.length>G)return`reports count (${e.reports.length}) exceeds cap (${G})`;if(e.bundles!==void 0){if(!Array.isArray(e.bundles))return"bundles field must be an array when present";if(e.bundles.length>C)return`bundles count (${e.bundles.length}) exceeds cap (${C})`;for(let r of e.bundles){if(typeof r!="string")return"bundles entries must be strings";if(r.length>E)return`bundle integrity exceeds per-entry length cap (${E})`}}if(e.bundleBlobs!==void 0){if(!Array.isArray(e.bundleBlobs))return"bundleBlobs field must be an array when present";if(e.bundleBlobs.length>z)return`bundleBlobs count (${e.bundleBlobs.length}) exceeds cap (${z})`;for(let r of e.bundleBlobs){if(!r||typeof r!="object"||Array.isArray(r))return"bundleBlobs entries must be objects";if(typeof r.integrity!="string"||r.integrity.length===0)return"bundleBlobs.integrity must be a non-empty string";if(r.integrity.length>E)return`bundleBlobs.integrity exceeds per-entry length cap (${E})`;if(typeof r.name!="string"||r.name.length===0)return"bundleBlobs.name must be a non-empty string";if(r.name.length>$)return`bundleBlobs.name exceeds per-entry length cap (${$})`;if(r.name.includes("\0"))return"bundleBlobs.name cannot contain NUL";if(typeof r.data!="string")return"bundleBlobs.data must be a base64 string";if(r.data.length>oe)return`bundleBlobs.data exceeds per-blob size cap (${J} bytes raw)`}}return null}async function Se(e){return new Uint8Array(await e.arrayBuffer())}async function Ie(e,r){if(K(e)){if(typeof r!="string"||!r)throw new TypeError("parseWorkspaceBundleBytes: password required for encrypted bundle");let t=await j(e,r);try{return q(await B(t))}catch(o){throw new Error("wrong password or corrupt bundle",{cause:o})}}let n;try{n=await B(e)}catch(t){throw new Error(`gzip decompression failed: ${t.message}`,{cause:t})}return q(n)}function q(e){let r;try{r=JSON.parse(e)}catch(o){throw new Error(`payload is not JSON: ${o.message}`,{cause:o})}let n=se(r);if(n===null)return r;let t=n.includes("exceeds cap");throw new Error(t?n:`not a deepview workspace export: ${n}`)}var ve="links";function ie(e){if(typeof e=="string")return e.length>0?e:null;if(!e||typeof e!="object"||Array.isArray(e))return null;let{id:r}=e;return typeof r=="string"&&r.length>0?r:null}function V(e){let r;try{r=JSON.parse(e)}catch{return null}if(!Array.isArray(r)||r.length===0)return null;let n=[],t=0;for(let o of r){if(!Array.isArray(o))return null;let s=new Set;for(let a of o){let c=ie(a);if(c===null)return null;O(c)?s.add(c):t++}s.size>1&&n.push([...s])}return{groups:n,skipped:t}}function Oe(e){let r=new Set;for(let n of e)for(let t of n)r.add(t);return r.size}function Pe(e,r){for(let n of e)for(let t of n){let o=r.get(t);o||r.set(t,o=new Set);for(let s of n)s!==t&&o.add(s)}return r}function ae(e,r){let n=e.trimStart().startsWith("[")?V(e):null;if(n)return{data:{source:"links",findings:[],links:n.groups},format:"links",reason:null};let t=M(e);if(t.data!=null||N(e,r)!=="codex")return t;try{return{data:{type:"security",source:"codex-security",findings:S(e).flatMap(s=>s.data.findings)},format:"codex",reason:null}}catch(o){return{data:null,format:null,reason:o instanceof Error?o.message:"Invalid Codex CSV"}}}function Ue(e,r){let n=ae(e,r);return n.data==null?Promise.resolve(null):m(JSON.stringify(n.data))}function ce(e){let r=new Set;for(let n of e){if(!n||typeof n!="object")continue;let t=n;typeof t.file=="string"&&t.file&&r.add(t.file);for(let o of Array.isArray(t.evidence)?t.evidence:[])typeof o?.file=="string"&&o.file&&r.add(o.file)}return r}function Y(e){let r=(I(e)??[]).flat().filter(t=>t!=null&&typeof t=="object"),n=d([{groups:[r],tree:e?.tree}]);return{directory:n,own:r.filter(t=>!g(t.file,n))}}function Ke(e){let r=new Map;for(let n of Y(e).own){let t=R(n);t&&r.set(t.toLowerCase(),t)}return r.size===1?[...r.values()][0]:null}function je(e){let{directory:r,own:n}=Y(e);return P([...ce(n)].filter(t=>!g(t,r)))}export{ge as a,w as b,ye as c,we as d,Z as e,ee as f,me as g,W as h,U as i,K as j,Be as k,G as l,Se as m,Ie as n,q as o,ve as p,V as q,Oe as r,Pe as s,ae as t,Ue as u,Ke as v,je as w,ue as x};
@@ -1 +1 @@
1
- import{Tc as a,Uc as b,Vc as c,Wc as d,Xc as e}from"./chunk-QSLWGJBQ.js";import"./chunk-K3X5EJBQ.js";import"./chunk-CVVJAXVY.js";import"./chunk-VIHGO77Y.js";import"./chunk-RFZQQXSG.js";import"./chunk-F4OMDNEY.js";import"./chunk-XYDGU6BM.js";import"./chunk-UYAXVRVL.js";import"./chunk-NRPC74AM.js";import"./chunk-XRWAV3DX.js";import"./chunk-W4J3MGLB.js";import"./chunk-GJ4IUCNS.js";import"./chunk-PNHBZGDD.js";import"./chunk-TINZZKP5.js";import"./chunk-R5O6FAW4.js";import"./chunk-CMQA4DM6.js";import"./chunk-ZPD5R5RP.js";import"./chunk-YVZH5SHP.js";import"./chunk-4XCDFGDP.js";import"./chunk-3BZ7JERB.js";import"./chunk-TZ5KB2Y5.js";import"./chunk-XYFXXB2G.js";import"./chunk-DIJJNTRH.js";import"./chunk-HIV7SVI7.js";import"./chunk-GNXOKIGP.js";import"./chunk-C4Z6ZBXV.js";import"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-V5O7M2YT.js";import"./chunk-OOJM4CTU.js";export{e as createManagedAnnotationRead,c as hydrateManagedReportTriage,a as initManagedTriagePush,d as refreshManagedReportTriage,b as resetManagedTriage};
1
+ import{Tc as a,Uc as b,Vc as c,Wc as d,Xc as e}from"./chunk-MYDDTA7W.js";import"./chunk-K3X5EJBQ.js";import"./chunk-CVVJAXVY.js";import"./chunk-VIHGO77Y.js";import"./chunk-RFZQQXSG.js";import"./chunk-RSHMVYNS.js";import"./chunk-XYDGU6BM.js";import"./chunk-UYAXVRVL.js";import"./chunk-NRPC74AM.js";import"./chunk-VQJCXGIY.js";import"./chunk-W4J3MGLB.js";import"./chunk-GJ4IUCNS.js";import"./chunk-PNHBZGDD.js";import"./chunk-UXNUAIIC.js";import"./chunk-R5O6FAW4.js";import"./chunk-CMQA4DM6.js";import"./chunk-4F6JSF57.js";import"./chunk-YVZH5SHP.js";import"./chunk-4XCDFGDP.js";import"./chunk-3BZ7JERB.js";import"./chunk-TZ5KB2Y5.js";import"./chunk-XYFXXB2G.js";import"./chunk-DIJJNTRH.js";import"./chunk-WZDTZE64.js";import"./chunk-GNXOKIGP.js";import"./chunk-C4Z6ZBXV.js";import"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-V5O7M2YT.js";import"./chunk-OOJM4CTU.js";export{e as createManagedAnnotationRead,c as hydrateManagedReportTriage,a as initManagedTriagePush,d as refreshManagedReportTriage,b as resetManagedTriage};
@@ -1 +1 @@
1
- import{Cd as G,Fa as N,Ja as H,Jd as P,_c as R,ad as v,bd as U,db as I,eb as p,fb as B,h as o,i as f,pa as q,pd as D,q as A,r as C,s as _,x as $}from"./chunk-QSLWGJBQ.js";import{b as M}from"./chunk-CVVJAXVY.js";import{u as x}from"./chunk-F4OMDNEY.js";import{c as b}from"./chunk-ZPD5R5RP.js";async function V(e,{openManagedReport:n,readTeam:t=G,isCurrent:i=()=>!0}){let c=o.managedSession,r=()=>i()&&f()&&o.managedSession?.id===c?.id&&o.managedSession?.role===c?.role,u=o.managedTeams;if(!r())return null;async function m(a,s){return!r()||(o.currentManagedTeam!==a.id||o.currentManagedReport!==s)&&!await n(a,s)||!r()||o.currentManagedTeam!==a.id||o.currentManagedReport!==s?null:p(e.id)}if(e.teamId){let a=u.find(s=>s.id===e.teamId);return!a||e.reportId&&!a.reports.some(s=>s.id===e.reportId)?null:m(a,e.reportId??null)}let w=u.flatMap(a=>a.reports.map(s=>({team:a,report:s}))),h=new Set,d=new Map;async function k(a){for(let{team:s,report:l}of a){if(!r())return null;if(h.has(`${s.id}:${l.id}`))continue;h.add(`${s.id}:${l.id}`),d.has(s.id)||d.set(s.id,await t(s.id));let y=d.get(s.id)?.find(S=>S.id===l.id);if(!r())return null;if(y==null)continue;let j=await x(JSON.stringify(y.data),l.filename);if(!r())return null;if(j?.findings.some(S=>S.id===e.id))return m(s,l.id)}return null}if(e.report){let a=await Promise.all(w.map(({report:l})=>b("report",l.filename))),s=await k(w.filter((l,y)=>a[y]===e.report));if(s||!r())return s}if(e.workspace){let a=await Promise.all(u.map(l=>b("workspace",`managed-team:${l.id}`))),s=u[a.indexOf(e.workspace)];if(s){let l=await m(s,null);if(l||!r())return l}}if(!r())return null;let O=u.find(a=>a.id===o.currentManagedTeam);if(O&&(o.currentManagedReport==null||O.reports.some(a=>a.id===o.currentManagedReport))){let a=p(e.id);if(a)return a}return k(w)}async function J(e,n,t,{openReport:i,openManagedReport:c}){if(f()){let r=o.managedTeams.find(u=>u.id===o.currentManagedTeam);if(!t||!r?.reports.some(u=>u.id===t)||(o.currentManagedReport!==t||o.currentWorkspace)&&!await c(r,t)||!f()||o.currentManagedTeam!==r.id||o.currentManagedReport!==t||o.currentWorkspace)return null}else if(t||((o.currentFile!==n||o.currentWorkspace)&&await i(n),f()||o.currentFile!==n||o.currentWorkspace))return null;return p(e)}async function K(e,n){if(f())return V(e,n);let{openReport:t,openWorkspace:i}=n,[c,r]=await Promise.all([C(e.report),A(e.workspace)]);async function u(d){let k=I(d,r?.id);return(o.currentFile!==d||o.currentWorkspace||o.currentReportWorkspace!==k)&&await t(d,void 0,{workspaceId:k}),p(e.id)}if(c){let d=await u(c);if(d)return d}if(r){o.currentWorkspace!==r.id&&await i(r.id);let d=p(e.id);if(d)return d}let m=p(e.id);if(m)return m;let w=o.reports.map(d=>d.fileName).filter(Boolean),h=await _(e.id,{skip:w});return h?await u(h):null}var z="100% 0px",Q=new WeakMap,g=new WeakMap,L=[],E=!1,X=new WeakMap;function Z(e){let n=X.get(e);if(n===void 0){let t=getComputedStyle(e).overflowY;n=t==="auto"||t==="scroll"||t==="overlay",X.set(e,n)}return n}function W(e){let n=e.parentNode;for(;n;){if(n.nodeType===Node.DOCUMENT_FRAGMENT_NODE){n=n.host??null;continue}if(n.nodeType!==Node.ELEMENT_NODE||n===document.documentElement)return null;if(Z(n))return n;n=n.parentNode}return null}function ee(e){for(let n of e)g.get(n.target)?.cb(n.isIntersecting)}function ne(e){let n=e??document,t=Q.get(n);return t||(t=new IntersectionObserver(ee,{root:e,rootMargin:z,threshold:0}),Q.set(n,t)),t}function Se(e,n){let t=g.get(e);t?.io&&t.io.unobserve(e),g.set(e,{cb:n,io:null}),L.push(e),E||(E=!0,queueMicrotask(te))}function te(){E=!1;let e=L;L=[];for(let n of e){let t=g.get(n);!t||t.io||(t.io=ne(W(n)),t.io.observe(n))}}function be(e){let n=g.get(e);n&&(n.io?.unobserve(e),g.delete(e))}var oe=1600,F="link-target",ie="Couldn't find that finding in any of your reports. Import the report it came from, then open the link again.",T=null,re=3,ae=150,se=5;function ce(e){T!==null&&clearTimeout(T);for(let n of document.querySelectorAll(`.${F}`))n.classList.remove(F);e.classList.add(F),T=setTimeout(()=>{e.classList.remove(F),T=null},oe)}function ue(e){return new Promise(n=>{let t=null,i=0,c=0,r=()=>{let u=Math.round(e.getBoundingClientRect().top);i=u===t?i+1:0,t=u,i>=re||++c>=ae?n():requestAnimationFrame(r)};requestAnimationFrame(r)})}function de(e){let n=0,t=window.innerHeight,i=W(e);if(i){let c=i.getBoundingClientRect();n=Math.max(n,c.top),t=Math.min(t,c.bottom)}return{top:n,bottom:t}}function le(e){let n=e.getBoundingClientRect();if(n.height===0)return!1;let{top:t,bottom:i}=de(e);if(i<=t)return!1;let c=(t+i)/2;return n.top>=t&&n.bottom<=i||n.top<=c&&n.bottom>=c}async function fe(e){e.scrollIntoView({block:"center",behavior:"smooth"});for(let n=0;n<se;n++){if(await ue(e),!e.isConnected||le(e))return;e.scrollIntoView({block:"center",behavior:"instant"})}}async function pe(e){let n=CSS.escape(e);if(o.viewMode==="table"){let t=M.querySelector("finding-table");if(t){try{await t.updateComplete}catch{}for(let i of t.shadowRoot?.querySelectorAll("finding-row")??[])if(i.group&&q(i.group)===e)return i}}if(o.viewMode==="kanban"){let t=M.querySelector(`.kanban-card[data-gid="${n}"]`);if(t)return t}return M.querySelector(`finding-card[data-gid="${n}"]`)??M.querySelector(`[data-gid="${n}"]`)}async function Y(e,n,t=()=>!0){let i=B(e.group,n),c=H(i);if(c&&N(c)&&queueMicrotask($),D(),await P({revealSelection:!0}),!t())return{ok:!1};let r=await pe(i);return t()?r?(typeof r.ensureRendered=="function"&&await r.ensureRendered(),await fe(r),t()?(ce(r),{ok:!0}):{ok:!1}):{ok:!0}:{ok:!1}}async function $e(e,{openManagedReport:n=v,isCurrent:t=()=>!0}={}){if(!e?.id)return{ok:!1,reason:"This link is missing a finding id."};let i=await K(e,{openReport:R,openWorkspace:U,openManagedReport:n,isCurrent:t});return t()?i?await Y(i,e.id,t):{ok:!1,reason:f()?"Couldn't find that finding in the team reports you can access.":ie}:{ok:!1}}async function qe(e,n,t=null){if(!e||!n)return{ok:!1,reason:"Missing finding id or report name."};let i=await J(e,n,t,{openReport:R,openManagedReport:v});return i?await Y(i,e):{ok:!1,reason:t?`Could not open that finding in "${n}". Open the team and try again.`:`Couldn't find that finding in "${n}". It may have been re-imported since this links file was written.`}}export{Se as a,be as b,$e as c,qe as d};
1
+ import{Cd as G,Fa as N,Ja as H,Jd as P,_c as R,ad as v,bd as U,db as I,eb as p,fb as B,h as o,i as f,pa as q,pd as D,q as A,r as C,s as _,x as $}from"./chunk-MYDDTA7W.js";import{b as M}from"./chunk-CVVJAXVY.js";import{u as x}from"./chunk-RSHMVYNS.js";import{c as b}from"./chunk-4F6JSF57.js";async function V(e,{openManagedReport:n,readTeam:t=G,isCurrent:i=()=>!0}){let c=o.managedSession,r=()=>i()&&f()&&o.managedSession?.id===c?.id&&o.managedSession?.role===c?.role,u=o.managedTeams;if(!r())return null;async function m(a,s){return!r()||(o.currentManagedTeam!==a.id||o.currentManagedReport!==s)&&!await n(a,s)||!r()||o.currentManagedTeam!==a.id||o.currentManagedReport!==s?null:p(e.id)}if(e.teamId){let a=u.find(s=>s.id===e.teamId);return!a||e.reportId&&!a.reports.some(s=>s.id===e.reportId)?null:m(a,e.reportId??null)}let w=u.flatMap(a=>a.reports.map(s=>({team:a,report:s}))),h=new Set,d=new Map;async function k(a){for(let{team:s,report:l}of a){if(!r())return null;if(h.has(`${s.id}:${l.id}`))continue;h.add(`${s.id}:${l.id}`),d.has(s.id)||d.set(s.id,await t(s.id));let y=d.get(s.id)?.find(S=>S.id===l.id);if(!r())return null;if(y==null)continue;let j=await x(JSON.stringify(y.data),l.filename);if(!r())return null;if(j?.findings.some(S=>S.id===e.id))return m(s,l.id)}return null}if(e.report){let a=await Promise.all(w.map(({report:l})=>b("report",l.filename))),s=await k(w.filter((l,y)=>a[y]===e.report));if(s||!r())return s}if(e.workspace){let a=await Promise.all(u.map(l=>b("workspace",`managed-team:${l.id}`))),s=u[a.indexOf(e.workspace)];if(s){let l=await m(s,null);if(l||!r())return l}}if(!r())return null;let O=u.find(a=>a.id===o.currentManagedTeam);if(O&&(o.currentManagedReport==null||O.reports.some(a=>a.id===o.currentManagedReport))){let a=p(e.id);if(a)return a}return k(w)}async function J(e,n,t,{openReport:i,openManagedReport:c}){if(f()){let r=o.managedTeams.find(u=>u.id===o.currentManagedTeam);if(!t||!r?.reports.some(u=>u.id===t)||(o.currentManagedReport!==t||o.currentWorkspace)&&!await c(r,t)||!f()||o.currentManagedTeam!==r.id||o.currentManagedReport!==t||o.currentWorkspace)return null}else if(t||((o.currentFile!==n||o.currentWorkspace)&&await i(n),f()||o.currentFile!==n||o.currentWorkspace))return null;return p(e)}async function K(e,n){if(f())return V(e,n);let{openReport:t,openWorkspace:i}=n,[c,r]=await Promise.all([C(e.report),A(e.workspace)]);async function u(d){let k=I(d,r?.id);return(o.currentFile!==d||o.currentWorkspace||o.currentReportWorkspace!==k)&&await t(d,void 0,{workspaceId:k}),p(e.id)}if(c){let d=await u(c);if(d)return d}if(r){o.currentWorkspace!==r.id&&await i(r.id);let d=p(e.id);if(d)return d}let m=p(e.id);if(m)return m;let w=o.reports.map(d=>d.fileName).filter(Boolean),h=await _(e.id,{skip:w});return h?await u(h):null}var z="100% 0px",Q=new WeakMap,g=new WeakMap,L=[],E=!1,X=new WeakMap;function Z(e){let n=X.get(e);if(n===void 0){let t=getComputedStyle(e).overflowY;n=t==="auto"||t==="scroll"||t==="overlay",X.set(e,n)}return n}function W(e){let n=e.parentNode;for(;n;){if(n.nodeType===Node.DOCUMENT_FRAGMENT_NODE){n=n.host??null;continue}if(n.nodeType!==Node.ELEMENT_NODE||n===document.documentElement)return null;if(Z(n))return n;n=n.parentNode}return null}function ee(e){for(let n of e)g.get(n.target)?.cb(n.isIntersecting)}function ne(e){let n=e??document,t=Q.get(n);return t||(t=new IntersectionObserver(ee,{root:e,rootMargin:z,threshold:0}),Q.set(n,t)),t}function Se(e,n){let t=g.get(e);t?.io&&t.io.unobserve(e),g.set(e,{cb:n,io:null}),L.push(e),E||(E=!0,queueMicrotask(te))}function te(){E=!1;let e=L;L=[];for(let n of e){let t=g.get(n);!t||t.io||(t.io=ne(W(n)),t.io.observe(n))}}function be(e){let n=g.get(e);n&&(n.io?.unobserve(e),g.delete(e))}var oe=1600,F="link-target",ie="Couldn't find that finding in any of your reports. Import the report it came from, then open the link again.",T=null,re=3,ae=150,se=5;function ce(e){T!==null&&clearTimeout(T);for(let n of document.querySelectorAll(`.${F}`))n.classList.remove(F);e.classList.add(F),T=setTimeout(()=>{e.classList.remove(F),T=null},oe)}function ue(e){return new Promise(n=>{let t=null,i=0,c=0,r=()=>{let u=Math.round(e.getBoundingClientRect().top);i=u===t?i+1:0,t=u,i>=re||++c>=ae?n():requestAnimationFrame(r)};requestAnimationFrame(r)})}function de(e){let n=0,t=window.innerHeight,i=W(e);if(i){let c=i.getBoundingClientRect();n=Math.max(n,c.top),t=Math.min(t,c.bottom)}return{top:n,bottom:t}}function le(e){let n=e.getBoundingClientRect();if(n.height===0)return!1;let{top:t,bottom:i}=de(e);if(i<=t)return!1;let c=(t+i)/2;return n.top>=t&&n.bottom<=i||n.top<=c&&n.bottom>=c}async function fe(e){e.scrollIntoView({block:"center",behavior:"smooth"});for(let n=0;n<se;n++){if(await ue(e),!e.isConnected||le(e))return;e.scrollIntoView({block:"center",behavior:"instant"})}}async function pe(e){let n=CSS.escape(e);if(o.viewMode==="table"){let t=M.querySelector("finding-table");if(t){try{await t.updateComplete}catch{}for(let i of t.shadowRoot?.querySelectorAll("finding-row")??[])if(i.group&&q(i.group)===e)return i}}if(o.viewMode==="kanban"){let t=M.querySelector(`.kanban-card[data-gid="${n}"]`);if(t)return t}return M.querySelector(`finding-card[data-gid="${n}"]`)??M.querySelector(`[data-gid="${n}"]`)}async function Y(e,n,t=()=>!0){let i=B(e.group,n),c=H(i);if(c&&N(c)&&queueMicrotask($),D(),await P({revealSelection:!0}),!t())return{ok:!1};let r=await pe(i);return t()?r?(typeof r.ensureRendered=="function"&&await r.ensureRendered(),await fe(r),t()?(ce(r),{ok:!0}):{ok:!1}):{ok:!0}:{ok:!1}}async function $e(e,{openManagedReport:n=v,isCurrent:t=()=>!0}={}){if(!e?.id)return{ok:!1,reason:"This link is missing a finding id."};let i=await K(e,{openReport:R,openWorkspace:U,openManagedReport:n,isCurrent:t});return t()?i?await Y(i,e.id,t):{ok:!1,reason:f()?"Couldn't find that finding in the team reports you can access.":ie}:{ok:!1}}async function qe(e,n,t=null){if(!e||!n)return{ok:!1,reason:"Missing finding id or report name."};let i=await J(e,n,t,{openReport:R,openManagedReport:v});return i?await Y(i,e):{ok:!1,reason:t?`Could not open that finding in "${n}". Open the team and try again.`:`Couldn't find that finding in "${n}". It may have been re-imported since this links file was written.`}}export{Se as a,be as b,$e as c,qe as d};
@@ -1,4 +1,4 @@
1
- import{b as _e,h as Ee}from"./chunk-ZPD5R5RP.js";import{a as Le,e as Ce,h as Ie}from"./chunk-YVZH5SHP.js";import{A as Re,B as z,E as Se,b as G,c as ee,d as ye,j as L,m as C,p as I,s as xe,t as $e,w as ke,z as te}from"./chunk-GNXOKIGP.js";import{a as P,b as U,c as B}from"./chunk-C4Z6ZBXV.js";import{c as Q,f as N,g as ve}from"./chunk-2XUEZHIP.js";var tn=U(class extends B{constructor(e){if(super(e),e.type!==P.ATTRIBUTE||e.name!=="class"||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return" "+Object.keys(e).filter(t=>e[t]).join(" ")+" "}update(e,[t]){if(this.st===void 0){this.st=new Set,e.strings!==void 0&&(this.nt=new Set(e.strings.join(" ").split(/\s/).filter(o=>o!=="")));for(let o in t)t[o]&&!this.nt?.has(o)&&this.st.add(o);return this.render(t)}let n=e.element.classList;for(let o of this.st)o in t||(n.remove(o),this.st.delete(o));for(let o in t){let i=!!t[o];i===this.st.has(o)||this.nt?.has(o)||(i?(n.add(o),this.st.add(o)):(n.remove(o),this.st.delete(o)))}return N}});var Me="important",ut=" !"+Me,ln=U(class extends B{constructor(e){if(super(e),e.type!==P.ATTRIBUTE||e.name!=="style"||e.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce((t,n)=>{let o=e[n];return o==null?t:t+`${n=n.includes("-")?n:n.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${o};`},"")}update(e,[t]){let{style:n}=e.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(t)),this.render(t);for(let o of this.ft)t[o]==null&&(this.ft.delete(o),o.includes("-")?n.removeProperty(o):n[o]=null);for(let o in t){let i=t[o];if(i!=null){this.ft.add(o);let r=typeof i=="string"&&i.endsWith(ut);o.includes("-")||r?n.setProperty(o,r?i.slice(0,-11):i,r?Me:""):n[o]=i}}return N}});function H(e){return e.id??String(e._id)}function ne(e){let t=I(e);return t!==""&&t!=="revalidation"}var K=[{value:"confirmed",label:"Confirmed",kinds:["confirmed","partial","revalidation"]},{value:"unreachable",label:"Unreachable",kinds:["unreachable"]},{value:"refuted",label:"Refuted",kinds:["refuted"]}];function Ae(e){return K.find(t=>t.value===e)?.kinds??null}var ft=["","exclude","only"];function oe(e,t){let n=Ae(e);return n?.includes("partial")?t==="only"?["partial"]:t==="exclude"?["confirmed"]:n:n}function V(e){if(e.confidence!==void 0)return e.confidence;if(e.critical===!0||e._source)return 10}var pt=e=>e.confidence!==void 0||e.critical===!0;function dt(e){return e.every(t=>t.every(n=>V(n)!==void 0))&&e.some(t=>t.some(pt))}function Te(e,t,n){return e.some(o=>{let i=["refuted","unreachable"].includes(n(o))?0:V(o);return i===void 0?t===0:i>=t})}function gt(e,t){let n=e.map(t).filter(r=>r.length>0);if(!n.some(r=>r.some(s=>V(s)!==void 0)))return 0;let o=r=>n.reduce((s,l)=>s+(l.some(a=>(V(a)??-1)>=r)?1:0),0),i;for(o(6)<=25?i=6:o(7)<=25?i=7:i=8;i>0&&o(i-1)===o(i);)i--;return i}function je(e,t){return dt(e)?t:0}function ht(e,t,n){let o=new Set(e.ruledOutIds??[]);for(let i of e)for(let r of i)["refuted","unreachable"].includes(n(r))&&o.add(H(r));for(let i of e){let r=t(i);if(r.length!==0&&r.some(s=>oe("confirmed","").includes(n(s)||(s._source&&!s._sourcePass?"revalidation":"")))){for(let s of i)if(o.add(H(s)),s.isApp&&Array.isArray(s.revalidateInputs))for(let l of s.revalidateInputs)l&&o.add(l)}}return o}function mt(e,t,n,o){let i=je(e,t),r=e.filter(l=>Te(l,i,o));if(r.length===0)return!1;let s=new Set(oe("confirmed",""));return e.some(l=>l.some(a=>s.has(o(a))))?r.every(l=>l.every(a=>n.has(H(a)))):!1}function hn(e,{tabs:t,kindOf:n,severityMode:o}){let i=e.map(t).filter(l=>l.length>0),r=ht(e,t,n);if(!mt(i,gt(e,t),r,n))return!1;let s=je(i,6);return i.every(l=>!Te(l,s,n)||!l.some(a=>C(a,o)!=="low")||l.every(a=>r.has(H(a))))}var S=!0;function jn(e,t=!1){S=e!==!1&&!t}function Fn(){return S}function A(e){return S?I(e):""}function Dn(e){return I(e)!==""}function On(e){return e.some(t=>(t.groups??[]).some(n=>n.some(ne)))}function bt(e){let t=A(e);return t&&t!=="revalidation"?t:null}function Nn(e){return A(e)==="revalidation"}var Ve=new Set(["refuted","unreachable"]);function Pn(e){return Ve.has(A(e))}function Un(e){return Ve.has(A(e))}function Bn(e){let t=new Set(e);return K.filter(n=>n.kinds.some(o=>t.has(o)))}function Z(e){return new RegExp(`(^|/)${e}/`,"u")}function Ke(e){return new RegExp(`^(?:.*/)?${e}/(?:@[^/]+/[^/]+|[^/]+)/(.*)$`,"u")}var wt=Z("node_modules"),vt=Z("vendor"),M="node_modules",ae=Z(M),We=Ke(M);function yt(e){e!==M&&(M=e,ae=Z(e),We=Ke(e))}function Gn(e){yt(_e(e))}function Ze(){return M}function q(e){return ae.test(e)}var ie=new WeakSet;function zn(e){let t=!1;for(let n of e??[])for(let o of n.groups??[])for(let i of o){if(i.isApp!==!1)continue;let r=ie.has(i);"isUpstream"in i&&!r||(q(i.file)?(i.isUpstream!==!0&&(t=!0),i.isUpstream=!0,ie.add(i)):r&&(t=!0,delete i.isUpstream,ie.delete(i)))}return t}function Fe(e){let t=typeof e=="string"?e:"";return wt.test(t)||vt.test(t)||ae.test(t)}var xt=/^(.*(?:^|\/)node_modules\/(?:@[^/]+\/[^/]+|[^/]+))(?:\/|$)/u;function De(e){return xt.exec(typeof e=="string"?e:"")?.[1]??null}function Hn(e){return typeof e!="number"||!Number.isFinite(e)?null:Le(e)}function Vn(e){if(e.length<=1)return{prefix:"",stripped:[...e]};let t=e.map(s=>s.split("/")),n=Math.min(...t.map(s=>s.length)),o=0;for(let s=0;s<n-1&&t.every(l=>l[s]===t[0][s]);s++)o=s+1;if(o>0&&t[0][o-1].startsWith("@")&&o--,o>0&&t[0][o-1]==="node_modules"&&o--,o===0)return{prefix:"",stripped:[...e]};let i=`${t[0].slice(0,o).join("/")}/`,r=t.map(s=>s.slice(o).join("/"));return{prefix:i,stripped:r}}function $t(e){return e.match(We)?.[1]??e}function Kn(e){let t=S?[bt(e),e.revalidateVerdict,e.revalidateRecommendation]:[];return[e.file,e.title,e.description,e.impact,e.reproduction,Ft(e),e.recommendation,e.confidenceReason,...t,e.discoveredIn,e.repo?.github].filter(Boolean).join(`
1
+ import{b as _e,h as Ee}from"./chunk-4F6JSF57.js";import{a as Le,e as Ce,h as Ie}from"./chunk-YVZH5SHP.js";import{A as Re,B as z,E as Se,b as G,c as ee,d as ye,j as L,m as C,p as I,s as xe,t as $e,w as ke,z as te}from"./chunk-GNXOKIGP.js";import{a as P,b as U,c as B}from"./chunk-C4Z6ZBXV.js";import{c as Q,f as N,g as ve}from"./chunk-2XUEZHIP.js";var tn=U(class extends B{constructor(e){if(super(e),e.type!==P.ATTRIBUTE||e.name!=="class"||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return" "+Object.keys(e).filter(t=>e[t]).join(" ")+" "}update(e,[t]){if(this.st===void 0){this.st=new Set,e.strings!==void 0&&(this.nt=new Set(e.strings.join(" ").split(/\s/).filter(o=>o!=="")));for(let o in t)t[o]&&!this.nt?.has(o)&&this.st.add(o);return this.render(t)}let n=e.element.classList;for(let o of this.st)o in t||(n.remove(o),this.st.delete(o));for(let o in t){let i=!!t[o];i===this.st.has(o)||this.nt?.has(o)||(i?(n.add(o),this.st.add(o)):(n.remove(o),this.st.delete(o)))}return N}});var Me="important",ut=" !"+Me,ln=U(class extends B{constructor(e){if(super(e),e.type!==P.ATTRIBUTE||e.name!=="style"||e.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce((t,n)=>{let o=e[n];return o==null?t:t+`${n=n.includes("-")?n:n.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${o};`},"")}update(e,[t]){let{style:n}=e.element;if(this.ft===void 0)return this.ft=new Set(Object.keys(t)),this.render(t);for(let o of this.ft)t[o]==null&&(this.ft.delete(o),o.includes("-")?n.removeProperty(o):n[o]=null);for(let o in t){let i=t[o];if(i!=null){this.ft.add(o);let r=typeof i=="string"&&i.endsWith(ut);o.includes("-")||r?n.setProperty(o,r?i.slice(0,-11):i,r?Me:""):n[o]=i}}return N}});function H(e){return e.id??String(e._id)}function ne(e){let t=I(e);return t!==""&&t!=="revalidation"}var K=[{value:"confirmed",label:"Confirmed",kinds:["confirmed","partial","revalidation"]},{value:"unreachable",label:"Unreachable",kinds:["unreachable"]},{value:"refuted",label:"Refuted",kinds:["refuted"]}];function Ae(e){return K.find(t=>t.value===e)?.kinds??null}var ft=["","exclude","only"];function oe(e,t){let n=Ae(e);return n?.includes("partial")?t==="only"?["partial"]:t==="exclude"?["confirmed"]:n:n}function V(e){if(e.confidence!==void 0)return e.confidence;if(e.critical===!0||e._source)return 10}var pt=e=>e.confidence!==void 0||e.critical===!0;function dt(e){return e.every(t=>t.every(n=>V(n)!==void 0))&&e.some(t=>t.some(pt))}function Te(e,t,n){return e.some(o=>{let i=["refuted","unreachable"].includes(n(o))?0:V(o);return i===void 0?t===0:i>=t})}function gt(e,t){let n=e.map(t).filter(r=>r.length>0);if(!n.some(r=>r.some(s=>V(s)!==void 0)))return 0;let o=r=>n.reduce((s,l)=>s+(l.some(a=>(V(a)??-1)>=r)?1:0),0),i;for(o(6)<=25?i=6:o(7)<=25?i=7:i=8;i>0&&o(i-1)===o(i);)i--;return i}function je(e,t){return dt(e)?t:0}function ht(e,t,n){let o=new Set(e.ruledOutIds??[]);for(let i of e)for(let r of i)["refuted","unreachable"].includes(n(r))&&o.add(H(r));for(let i of e){let r=t(i);if(r.length!==0&&r.some(s=>oe("confirmed","").includes(n(s)||(s._source&&!s._sourcePass?"revalidation":"")))){for(let s of i)if(o.add(H(s)),s.isApp&&Array.isArray(s.revalidateInputs))for(let l of s.revalidateInputs)l&&o.add(l)}}return o}function mt(e,t,n,o){let i=je(e,t),r=e.filter(l=>Te(l,i,o));if(r.length===0)return!1;let s=new Set(oe("confirmed",""));return e.some(l=>l.some(a=>s.has(o(a))))?r.every(l=>l.every(a=>n.has(H(a)))):!1}function hn(e,{tabs:t,kindOf:n,severityMode:o}){let i=e.map(t).filter(l=>l.length>0),r=ht(e,t,n);if(!mt(i,gt(e,t),r,n))return!1;let s=je(i,6);return i.every(l=>!Te(l,s,n)||!l.some(a=>C(a,o)!=="low")||l.every(a=>r.has(H(a))))}var S=!0;function jn(e,t=!1){S=e!==!1&&!t}function Fn(){return S}function A(e){return S?I(e):""}function Dn(e){return I(e)!==""}function On(e){return e.some(t=>(t.groups??[]).some(n=>n.some(ne)))}function bt(e){let t=A(e);return t&&t!=="revalidation"?t:null}function Nn(e){return A(e)==="revalidation"}var Ve=new Set(["refuted","unreachable"]);function Pn(e){return Ve.has(A(e))}function Un(e){return Ve.has(A(e))}function Bn(e){let t=new Set(e);return K.filter(n=>n.kinds.some(o=>t.has(o)))}function Z(e){return new RegExp(`(^|/)${e}/`,"u")}function Ke(e){return new RegExp(`^(?:.*/)?${e}/(?:@[^/]+/[^/]+|[^/]+)/(.*)$`,"u")}var wt=Z("node_modules"),vt=Z("vendor"),M="node_modules",ae=Z(M),We=Ke(M);function yt(e){e!==M&&(M=e,ae=Z(e),We=Ke(e))}function Gn(e){yt(_e(e))}function Ze(){return M}function q(e){return ae.test(e)}var ie=new WeakSet;function zn(e){let t=!1;for(let n of e??[])for(let o of n.groups??[])for(let i of o){if(i.isApp!==!1)continue;let r=ie.has(i);"isUpstream"in i&&!r||(q(i.file)?(i.isUpstream!==!0&&(t=!0),i.isUpstream=!0,ie.add(i)):r&&(t=!0,delete i.isUpstream,ie.delete(i)))}return t}function Fe(e){let t=typeof e=="string"?e:"";return wt.test(t)||vt.test(t)||ae.test(t)}var xt=/^(.*(?:^|\/)node_modules\/(?:@[^/]+\/[^/]+|[^/]+))(?:\/|$)/u;function De(e){return xt.exec(typeof e=="string"?e:"")?.[1]??null}function Hn(e){return typeof e!="number"||!Number.isFinite(e)?null:Le(e)}function Vn(e){if(e.length<=1)return{prefix:"",stripped:[...e]};let t=e.map(s=>s.split("/")),n=Math.min(...t.map(s=>s.length)),o=0;for(let s=0;s<n-1&&t.every(l=>l[s]===t[0][s]);s++)o=s+1;if(o>0&&t[0][o-1].startsWith("@")&&o--,o>0&&t[0][o-1]==="node_modules"&&o--,o===0)return{prefix:"",stripped:[...e]};let i=`${t[0].slice(0,o).join("/")}/`,r=t.map(s=>s.slice(o).join("/"));return{prefix:i,stripped:r}}function $t(e){return e.match(We)?.[1]??e}function Kn(e){let t=S?[bt(e),e.revalidateVerdict,e.revalidateRecommendation]:[];return[e.file,e.title,e.description,e.impact,e.reproduction,Ft(e),e.recommendation,e.confidenceReason,...t,e.discoveredIn,e.repo?.github].filter(Boolean).join(`
2
2
  `).toLowerCase()}function Wn(e){return[typeof e?.category=="string"?e.category.trim():"",xe(e,S)].filter(Boolean).join(" \xB7 ")}function Zn(e){if(e.length===0)return"";let t=e[0];for(let n=1;n<e.length;n++){for(;t&&!e[n].startsWith(t);)t=t.slice(0,-1);if(!t)return""}return t}function qn(e){if(!e)return"";let t=e.match(/github\.com\/([^/?#]+\/[^/?#]+?)(?:\.git)?(?:[/?#]|$)/iu);return t?t[1]:e}function qe(e){if(!e)return null;let t=e.trim().replace(/\/$/u,"");return t?/^https?:\/\//iu.test(t)?t:/^github\.com\//iu.test(t)?`https://${t}`:`https://github.com/${t}`:null}var kt=/^(?:@[\w.-]+\/)?[\w.-]+@[^/\s@]+$/u;function Rt(e){return kt.test(e||"")}function Oe(e){if(e==null||typeof e=="string")return{id:e??"",prefix:""};let t=Se(e);return{id:typeof e.github=="string"?e.github:"",prefix:t?`${t}/`:""}}function St(e,t,n){if(Rt(e))return null;let o=Oe(t);if(o.id)return`https://github.com/${o.id}/blob/HEAD/${o.prefix}${$t(e)}`;if(q(e))return null;let i=Oe(n),r=qe(i.id);return r?`${r}/blob/HEAD/${i.prefix}${e}`:null}function Yn(e,t){let n=e?.file??"",o=W(e,t);return o?Q`<a href="${_t(o)}" target="_blank" rel="noopener">${n}</a>`:n}function _t(e){return e.replace(/#L\d+(?:-L?\d+)?$/u,"")}function W(e,t){if(!e)return null;if(z(e.location))return e.location;let n=St(e.file,e.repo,t);if(!n)return null;let o=parseInt(e.line,10);return Number.isFinite(o)?`${n}#L${o}`:n}var Et=/^https?:\/\/(?:www\.)?github\.com\/([^/\s]+\/[^/\s]+)\/(?:blob|tree|blame)\/[^/\s]+\/(\S+)$/u,Lt=/#L(\d+)(?:-L?(\d+))?$/u;function Jn(e){let t=typeof e=="string"?Et.exec(e):null;if(!t)return"";let n=t[2],o=Lt.exec(n);if(!o)return`${t[1]}/${n}`;n=n.slice(0,o.index);let i=o[2]?`${o[1]}-${o[2]}`:o[1];return`${t[1]}/${n}:${i}`}var Ct=/^(?:\s+\S|[-*+] |\d+[.)] |>|#{1,6} |\||`{3}|~{3})/u;function Ye(e){return e.split(/(\n{2,})/u).map(t=>{if(/^\n+$/u.test(t))return t;let n=t.split(`
3
3
  `);return n.some(o=>Ct.test(o))?t:n.map(o=>o.trim()).filter(Boolean).join(" ")}).join("")}function Ne(e,t,n){let o=t?/^\n*/u.exec(e)[0]:"",i=e.slice(o.length),r=n?/\n*$/u.exec(i)[0]:"";return o+Ye(i.slice(0,i.length-r.length))+r}function Xn(e){if(!e)return e;let t=G(e);if(t.length===0)return Ye(e);let n=[],o=0;for(let[i,r]of t)i>o&&n.push(Ne(e.slice(o,i),o>0,!0)),n.push(e.slice(i,r)),o=r;return o<e.length&&n.push(Ne(e.slice(o),!0,!1)),n.join("")}var Pe=/^( *)(`{3,}|~{3,})(.*)$/u,It=/^[a-z0-9+#._-]{1,20}$/u;function Je(e,t){let n=0;for(;n<t&&e[n]===" ";)n++;return e.slice(n)}function Mt(e){let t=e.split(`
4
4
  `),n=Pe.exec(t[0]),o=(n?.[2]??"```").slice(0,3),i=(n?.[3]??"").trim().split(/\s+/u)[0].toLowerCase(),s=!!(t.length>1?Pe.exec(t.at(-1)):null)?.[2].startsWith(o),l=n?.[1].length??0,a=t.slice(1,s?-1:void 0);return{lang:It.test(i)?i:"",code:(l>0?a.map(u=>Je(u,l)):a).join(`
@@ -0,0 +1,7 @@
1
+ import{a}from"./chunk-TUII34K2.js";var v="deepview-objstore.v1.put",y="deepview-objstore.v1.delete",h="deepview-objstore.v1.fetch",I="deepview-objstore.v1.fetch-rest",w="deepview-objstore.v1.put-rest",j="deepview-objstore.v1.delete-rest";function l(e){return e==null?"":String(e)}function p(e){return e??""}function x(e,n){return a([v,e.workspaceTag,e.resourceTag,l(e.prevVersion),p(e.prevIncarnation),e.contentHash,String(e.expectedLength),n].join(`
2
+ `))}function O(e,n){return a([y,e.workspaceTag,e.resourceTag,l(e.prevVersion),p(e.prevIncarnation),n].join(`
3
+ `))}function P(e,n,r){return a([h,e,n,r].join(`
4
+ `))}async function i(e,n){return new Uint8Array(await crypto.subtle.sign({name:"Ed25519"},e,n)).toBase64({alphabet:"base64url",omitPadding:!0})}function B(e,n,r){return i(e,x(n,r))}function D(e,n,r){return i(e,O(n,r))}function R(e,n,r,o){return i(e,P(n,r,o))}function A(e,n,r){return a([I,e,n,String(r)].join(`
5
+ `))}function _(e,n,r,o){return i(e,A(n,r,o))}function N(e,n){return a([w,e.workspaceTag,e.resourceTag,l(e.prevVersion),p(e.prevIncarnation),e.contentHash,String(e.expectedLength),String(n)].join(`
6
+ `))}function U(e,n,r){return i(e,N(n,r))}function T(e,n){return a([j,e.workspaceTag,e.resourceTag,l(e.prevVersion),p(e.prevIncarnation),String(n)].join(`
7
+ `))}function L(e,n,r){return i(e,T(n,r))}async function H(e){let n=await crypto.subtle.digest("SHA-256",e);return new Uint8Array(n).toBase64({alphabet:"base64url",omitPadding:!0})}var m="/api/config";var J="http://127.0.0.1:3123/";function d(e){if(typeof e!="string"||!e.trim())return null;try{let n=new URL(e);return!["http:","https:"].includes(n.protocol)||n.username||n.password||n.search||n.hash?null:(n.pathname=n.pathname.replace(/\/+$/u,"")+"/",n.href)}catch{return null}}var b="deepview.sync.serverInfo",g="deepview.sync.standaloneProbe";function $(){try{return localStorage.getItem(g)==="1"}catch{return!1}}function X(){try{localStorage.setItem(g,"1")}catch{}}function f(e){return e==="managed+e2e"||e==="e2e+managed"}function q(e,n){return(e==="managed"||f(e))&&/^\/(?:team|manage|npm|my)(?:\/|$)/u.test(n)}function Q(e,n=null){return n&&(f(e)||e===n)?n:e==="managed"||e==="managed+e2e"?"managed":"e2e"}function W(e,n){return e&&f(e.mode)&&n.mode==="e2e"?{...e,githubNewIssueLabels:n.githubNewIssueLabels??"",...n.deepviewScanServer?{deepviewScanServer:n.deepviewScanServer}:{}}:n}function S(e){if(e==null||typeof e!="object")return null;let n=e.mode;if(n!=="e2e"&&n!=="managed"&&n!=="managed+e2e"&&n!=="e2e+managed")return null;let r=null,o=e.managed;if(o!=null&&typeof o=="object"){let u=o.loginPath,c=o.cookieName;typeof u=="string"&&typeof c=="string"&&(r={loginPath:u,cookieName:c},o.allowShare===!0&&(r.allowShare=!0))}let t=n==="managed"?null:d(e.deepviewScanServer),s=e.githubNewIssueLabels;return{mode:n,managed:r,...t?{deepviewScanServer:t}:{},...typeof s=="string"&&s.length<=4096?{githubNewIssueLabels:s}:{}}}async function Z(){try{let e=await fetch(m,{credentials:"same-origin",cache:"no-store",headers:{accept:"application/json"}});return e.status===404?"standalone":e.ok?S(await e.json()):null}catch{return null}}async function ee(e,n=3e3){let r;try{return await Promise.race([e,new Promise(o=>{r=setTimeout(()=>o(null),n)})])}catch{return null}finally{clearTimeout(r)}}function ne(){try{let e=localStorage.getItem(b);if(e==null)return null;let n=S(JSON.parse(e));return n?{mode:n.mode,managed:n.managed}:null}catch{return null}}function re(e){try{localStorage.setItem(b,JSON.stringify({mode:e.mode,managed:e.managed})),localStorage.removeItem(g)}catch{}}var E="deepview.objstore-presence.";function M(e){return E+e}function C(e){try{let n=localStorage.getItem(M(e));if(!n)return null;let r=JSON.parse(n);return!r||typeof r!="object"?null:{names:r.names&&typeof r.names=="object"?r.names:{},bundles:r.bundles&&typeof r.bundles=="object"?r.bundles:{},bundleNames:r.bundleNames&&typeof r.bundleNames=="object"?r.bundleNames:{},baselines:k(r.baselines,r.localVersions)}}catch{return null}}function k(e,n){let r={};if(n&&typeof n=="object")for(let[o,t]of Object.entries(n))Number.isSafeInteger(t)&&t>=0&&(r[o]={version:t,incarnation:null,synced:!0,hash:null});if(e&&typeof e=="object")for(let[o,t]of Object.entries(e))!t||typeof t!="object"||!Number.isSafeInteger(t.version)||t.version<0||t.incarnation!=null&&typeof t.incarnation!="string"||(r[o]={version:t.version,incarnation:t.incarnation??null,synced:t.synced===!0,hash:typeof t.hash=="string"?t.hash:null});return r}function oe(e,n,r,o){let t=C(e),s=Object.entries((n==="bundle"?t?.bundles:t?.names)??{}).find(([,c])=>c===r)?.[0],u=t?.baselines?.[s];return{synced:s!==void 0&&(n==="bundle"||u?.synced===!0&&u.hash===o),cached:!0}}export{B as a,D as b,R as c,_ as d,U as e,L as f,H as g,J as h,d as i,$ as j,X as k,f as l,q as m,Q as n,W as o,S as p,Z as q,ee as r,ne as s,re as t,M as u,C as v,oe as w};
@@ -0,0 +1 @@
1
+ var A=new Set(["overview","graph","treemap","compare","advisories","issues","code","search","terminal"]);var Z=/^\d+$/u;function D(e){for(let l=0;l<e.length;l++){let a=e.codePointAt(l);if(a<32||a===127)return!0}return!1}var L=512;function G(e){return typeof e=="string"&&e.length>0&&e.length<=L&&!D(e)}function E(e){return G(e)&&!Z.test(e)}var F=/^(?=.{1,214}$)(?:@[\w.-]+\/[\w-]|[\dA-Za-z])[\w.-]*$/u,j=/^(?=.{1,256}$)[\dA-Za-z][\w.+-]*$/u,X=/^@[\da-z~-][\w.~-]*$/u;function $(e){return typeof e=="string"&&F.test(e)}function m(e){return typeof e=="string"&&j.test(e)}function J(e){if(typeof e!="string")return null;let l=e.trim().toLowerCase(),a=l.startsWith("@")?l:`@${l}`;return a.length<=214&&X.test(a)?a:null}var h=new Set(["code","diff"]),ne=e=>h.has(e)?"code":"overview",x=e=>h.has(e)?{compareMode:"code"}:{},y=e=>h.has(e)?"/code":"",M=Object.freeze({manage:"/manage","manage-bundles":"/manage/bundle","manage-scans":"/manage/scans","manage-reports":"/manage/report","manage-repos":"/manage/repositories","manage-repo-risk":"/manage/repositories/risk","admin-users":"/manage/users","manage-teams":"/manage/team","manage-import":"/manage/import","manage-links":"/manage/links","manage-deduplication":"/manage/deduplication","manage-history":"/manage/history"});function O(e){if(!E(e)||e==="."||e==="..")return null;try{return`/finding/${encodeURIComponent(e)}`}catch{return null}}function ae(e){if(!e)return null;if(e.view==="home")return"/";if(e.view==="reviews")return"/my/reviews";if(e.view==="npm")return H(e);if(e.view==="workspace-reports"||e.view==="workspace-bundles")return/^[A-Za-z0-9_-]+$/u.test(e.teamSlug??"")?`/team/${e.teamSlug}/${e.view.slice(10)}`:null;if(e.view==="bundles"){if(!/^[A-Za-z0-9_-]+$/u.test(e.bundleSlug??"")||[e.teamSlug,e.compareSlug].some(u=>u!=null&&!/^[A-Za-z0-9_-]+$/u.test(u)))return null;let n=e.bundleTab??"overview";if(!A.has(n))return null;let r=e.teamSlug?`/team/${e.teamSlug}`:"/manage",o=n==="code"&&g(e.file)?`/${e.file}`:"",s=o&&g(e.line)?`#L${e.line}${g(e.endLine)&&e.endLine>e.line?`-L${e.endLine}`:""}`:"",t=n==="compare"&&e.compareSlug!=null?`/${e.compareSlug}${y(e.compareMode)}`:"";return`${r}/bundle/${e.bundleSlug}${n==="overview"?"":`/${n}`}${o}${t}${s}`}if(Object.hasOwn(M,e.view)){let n=M[e.view];return e.view==="manage-deduplication"&&e.linkId?`${n}?report=${encodeURIComponent(e.linkId)}`:e.view==="manage-bundles"&&Number.isSafeInteger(e.createRepoId)&&e.createRepoId>0?`${n}?createRepo=${e.createRepoId}`:e.view==="manage-scans"&&e.scanMode==="link"?`${n}?mode=link`:e.view==="manage-scans"&&e.bundleId?`${n}?bundle=${encodeURIComponent(e.bundleId)}${e.scanMode==="dependencies"?"&mode=dependencies":""}`:e.view==="manage-history"&&e.actor?`${n}?actor=${encodeURIComponent(e.actor)}`:n}if(!["findings","files"].includes(e.view)||!e.teamSlug||[e.teamSlug,e.reportSlug].some(n=>n!=null&&!/^[A-Za-z0-9_-]+$/u.test(n)))return null;let l=`/team/${encodeURIComponent(e.teamSlug)}`,a=e.reportSlug?`/report/${encodeURIComponent(e.reportSlug)}`:"";if(e.finding){let n=O(e.finding.id);return e.view==="findings"&&n?`${l}${a}${n}`:null}return`${l}${a}${e.view==="files"?"/files":""}`}var B=new Set(["overview","code","compare","review","treemap"]);function H(e){if(e.packageName==null)return"/npm";let l=e.bundleTab??"overview";if(!$(e.packageName)||e.packageSpec!=null&&!m(e.packageSpec)||!B.has(l)||e.compareSpec!=null&&!m(e.compareSpec))return null;if(l==="review"){if(e.reviewPackage!=null&&!$(e.reviewPackage)||e.reviewSpec!=null&&!m(e.reviewSpec))return null;let o=e.reviewPackage==null?"":`/${e.reviewPackage}${e.reviewSpec==null?"":`@${e.reviewSpec}`}`;return`/npm/${e.packageName}${e.packageSpec==null?"":`@${e.packageSpec}`}/review${o}`}let a=l==="code"&&g(e.file)?`/${e.file}`:"",n=a&&g(e.line)?`#L${e.line}${g(e.endLine)&&e.endLine>e.line?`-L${e.endLine}`:""}`:"",r=l==="compare"&&e.compareSpec!=null?`/${e.compareSpec}${y(e.compareMode)}`:"";return`/npm/${e.packageName}${e.packageSpec==null?"":`@${e.packageSpec}`}${l==="overview"?"":`/${l}`}${a}${r}${n}`}function K(e,l){let a=/^\/npm\/((?:@[^/@]+\/)?[^/@]+)(?:@([^/]+))?\/review(?:\/((?:@[^/@]+\/)?[^/@]+)(?:@([^/]+))?)?$/u.exec(e);if(a){if(!$(a[1])||a[2]!=null&&!m(a[2])||a[3]!=null&&!$(a[3])||a[4]!=null&&!m(a[4]))return null;let s=a[3]&&/^\d+\.\d+\.\d+(?:[-+].*)?$/u.test(a[3])&&a[4]==null;return{view:"npm",packageName:a[1],packageSpec:a[2]??null,bundleTab:"review",...a[3]?{reviewPackage:s?a[1]:a[3],reviewSpec:s?a[3]:a[4]??null}:{}}}let n=/^\/npm(?:\/((?:@[^/@]+\/)?[^/@]+)(?:@([^/]+))?(?:\/(code|compare|treemap)(?:\/([^/]+)(?:\/([a-z]+))?)?)?)?$/u.exec(e);if(!n)return;if(n[1]==null)return{view:"npm"};if(!$(n[1])||n[2]!=null&&!m(n[2]))return null;let r={view:"npm",packageName:n[1],packageSpec:n[2]??null,bundleTab:n[3]??"overview"};if(n[4]==null)return r;if(r.bundleTab==="compare")return m(n[4])&&(n[5]==null||h.has(n[5]))?{...r,compareSpec:n[4],...x(n[5])}:null;if(r.bundleTab!=="code")return null;let o=Number(n[4]);return!n[5]&&/^[1-9]\d*$/u.test(n[4])&&Number.isSafeInteger(o)?{...r,file:o,...T(l)}:null}function g(e){return Number.isSafeInteger(e)&&e>0}function T(e){let l=/^#L([1-9]\d*)(?:-L([1-9]\d*))?$/u.exec(e),[a,n]=l?[Number(l[1]),Number(l[2]??l[1])]:[];return!g(a)||!g(n)?{}:a===n?{line:a}:{line:Math.min(a,n),endLine:Math.max(a,n)}}function le(e){let l=e.pathname.replace(/\/$/u,"")||"/";if(l==="/"||l==="/index.html")return{view:"home"};if(l==="/my/reviews")return{view:"reviews"};let a=Object.keys(M).find(t=>M[t]===l);if(a){let t=Number(e.searchParams.get("createRepo"));return{view:a,...a==="manage-deduplication"&&e.searchParams.get("report")?{linkId:e.searchParams.get("report")}:{},...a==="manage-bundles"&&Number.isSafeInteger(t)&&t>0?{createRepoId:t}:{},...a==="manage-history"&&e.searchParams.get("actor")?{actor:e.searchParams.get("actor")}:{},...a==="manage-scans"?e.searchParams.get("mode")==="link"?{scanMode:"link"}:e.searchParams.get("bundle")?{bundleId:e.searchParams.get("bundle"),...e.searchParams.get("mode")==="dependencies"?{scanMode:"dependencies"}:{}}:{}:{}}}let n=/^(?:\/team\/([A-Za-z0-9_-]+)|\/manage)\/bundle\/([A-Za-z0-9_-]+)(?:\/([a-z]+)(?:\/([A-Za-z0-9_-]+)(?:\/([a-z]+))?)?)?$/u.exec(l);if(n){let t=n[3]??"overview";if(!A.has(t))return null;let u={view:"bundles",teamSlug:n[1]??null,bundleSlug:n[2],bundleTab:t};if(n[4]==null)return u;if(t==="compare")return n[5]==null||h.has(n[5])?{...u,compareSlug:n[4],...x(n[5])}:null;let c=Number(n[4]);return t!=="code"||n[5]||!/^[1-9]\d*$/u.test(n[4])||!Number.isSafeInteger(c)?null:{...u,file:c,...T(e.hash)}}let r=K(l,e.hash);if(r!==void 0)return r;let o=/^\/team\/([A-Za-z0-9_-]+)\/(reports|bundles)$/u.exec(l);if(o)return{view:`workspace-${o[2]}`,teamSlug:o[1]};let s=/^\/team\/([^/]+)(?:\/report\/([^/]+))?(?:\/(files)|\/finding\/([^/]+))?$/u.exec(l);if(!s)return null;try{let t=decodeURIComponent(s[1]),u=s[2]?decodeURIComponent(s[2]):null;if([t,u].some(p=>p!=null&&!/^[A-Za-z0-9_-]+$/u.test(p))||s[4]?.length>L*9)return null;let c=s[4]?decodeURIComponent(s[4]):null;return c!=null&&!O(c)?null:{view:s[3]?"files":"findings",teamSlug:t,reportSlug:u,...c==null?{}:{finding:{id:c}}}}catch{return null}}function R(e,l,a=[]){if(e.view==="workspace-reports"||e.view==="workspace-bundles"){let i=l.filter(f=>f.slug===e.teamSlug);return i.length===1?{view:e.view,teamId:i[0].id}:null}if(e.view==="bundles"){let{teamSlug:i,bundleSlug:f,compareSlug:I,compareMode:v,...k}=e,b=i==null?[]:l.filter(S=>S.slug===i);if(i!=null&&b.length!==1)return null;let w=b[0],N=i==null?a:l.flatMap(S=>S.bundles??[]),d=S=>new Set(N.filter(_=>_.slug===S).map(_=>_.id)),z=d(f),P=(w?.bundles??a).find(S=>S.slug===f);if(!f||!P||z.size!==1)return null;let C=I==null?null:d(I),U=C?.size===1?{compareId:[...C][0],...x(v)}:{};return{...k,teamId:w?.id??null,bundleId:P.id,...U}}if(!["findings","files"].includes(e.view))return e;let{teamSlug:n,reportSlug:r,...o}=e,s=l.filter(i=>i.slug===n);if(!n||s.length!==1)return null;let t=s[0];if(r==null)return{...o,teamId:t.id,reportId:null};let u=l.flatMap(i=>i.reports??[]).filter(i=>i.slug===r),c=new Set(u.map(i=>i.id)),p=(t.reports??[]).find(i=>i.slug===r);return p&&c.size===1?{...o,teamId:t.id,reportId:p.id}:null}function ie(e,l,a=[]){if(e.view==="workspace-reports"||e.view==="workspace-bundles"){let c=l.find(i=>i.id===e.teamId),p={view:e.view,teamSlug:c?.slug};return c?.slug&&R(p,l)?p:null}if(e.view==="bundles"){let{teamId:c,bundleId:p,compareId:i,compareMode:f,...I}=e,v=l.find(d=>d.id===c);if(c!=null&&!v?.slug)return null;let k=(v?.bundles??a).find(d=>d.id===p);if(!k?.slug)return null;let b=i==null?null:(c==null?a:l.flatMap(d=>d.bundles??[])).find(d=>d.id===i),w={...I,teamSlug:v?.slug??null,bundleSlug:k.slug,...b?.slug?{compareSlug:b.slug,...x(f)}:{}},N=R(w,l,a);if(!N)return null;if(w.compareSlug!=null&&N.compareId!==i){let{compareSlug:d,compareMode:z,...P}=w;return P}return w}if(!["findings","files"].includes(e.view))return e;let{teamId:n,reportId:r,...o}=e,s=l.find(c=>c.id===n),t=r==null?null:s?.reports?.find(c=>c.id===r);if(!s?.slug||r!=null&&!t?.slug)return null;let u={...o,teamSlug:s.slug,reportSlug:t?.slug??null};return R(u,l)?u:null}export{A as a,L as b,E as c,$ as d,m as e,J as f,ne as g,x as h,M as i,ae as j,B as k,le as l,R as m,ie as n};
@@ -1 +1 @@
1
- import{d as p}from"./chunk-IU3CCINR.js";import{f as h,g as R}from"./chunk-UYAXVRVL.js";import{i as S}from"./chunk-HIV7SVI7.js";import{J as C}from"./chunk-GNXOKIGP.js";async function y(e,t=null,n={}){let o;try{o=await p(e,{credentials:"same-origin",headers:{accept:"application/json"},...n})}catch{return t}if(o.status===401||o.status===403)return null;if(!o.ok)return t;try{return await o.json()}catch{return t}}async function T({fallback:e=null}={}){let t;try{let o=h(),s=await p(o?R(o):"/api/auth/session",{credentials:"same-origin",headers:{accept:"application/json"}});if(s.status===401||s.status===403)return null;if(!s.ok)return e;t=await s.json()}catch{return e}let n=t?.user;return n===null?null:n===void 0||typeof n.login!="string"?e:{id:n.id,login:n.login,name:typeof n.name=="string"?n.name:null,avatarUrl:typeof n.avatarUrl=="string"?n.avatarUrl:null,role:typeof n.role=="string"?n.role:"none",csrfToken:typeof t.csrfToken=="string"?t.csrfToken:null,...h()?{publicShare:!0}:{},...typeof t.viewer?.login=="string"?{viewer:{id:t.viewer.id,login:t.viewer.login,name:typeof t.viewer.name=="string"?t.viewer.name:null}}:{}}}function b(e){return e?.appMode===!1?{appMode:!1}:e?.appMode===!0&&Number.isSafeInteger(e.appFindings)&&e.appFindings>=0?{appMode:!0,appFindings:e.appFindings}:null}function O(e){if(typeof e?.sha!="string"||typeof e.github!="string"||!Array.isArray(e.tags))return null;let t=e.details,n=s=>typeof s=="string"?s:null,o=s=>Number.isSafeInteger(s)?s:null;return{sha:e.sha,github:e.github,tags:e.tags.filter(s=>typeof s=="string"),details:typeof t?.subject=="string"?{subject:t.subject,authorName:n(t.authorName),authorLogin:n(t.authorLogin),authoredAt:o(t.authoredAt),committedAt:o(t.committedAt)}:null}}async function F({fallback:e=[],signal:t,onRevision:n}={}){let o=h(),s=o?await y(R(o),null,{signal:t}):null,a=o?{teams:s?.team?[s.team]:[]}:await y("/api/teams",{teams:e},{signal:t}),l=a?.teams;return Array.isArray(l)?(n?.(typeof a.revision=="string"?a.revision:null),l.filter(i=>i!=null&&typeof i.id=="string"&&typeof i.name=="string").map(i=>({id:i.id,slug:i.slug,name:i.name,...!o&&i.dependencyReview===!0?{dependencyReview:!0}:{},...i.permissions?{permissions:{dependencies:i.permissions.dependencies===!0,security:i.permissions.security===!0}}:{},...typeof i.cacheKey=="string"?{cacheKey:i.cacheKey}:{},...b(i.app)?{app:b(i.app)}:{},reports:Array.isArray(i.reports)?i.reports.filter(r=>r!=null&&typeof r.id=="string"&&typeof r.filename=="string").map(r=>({id:r.id,slug:r.slug,filename:r.filename,visible:r.visible!==!1,...r.analyzer===null||typeof r.analyzer=="string"?{analyzer:r.analyzer}:{},repoFullName:typeof r.repoFullName=="string"?r.repoFullName:"",repoDirectory:typeof r.repoDirectory=="string"?r.repoDirectory:"",...typeof r.cacheKey=="string"?{cacheKey:r.cacheKey}:{}})):[],bundles:Array.isArray(i.bundles)?i.bundles.filter(r=>r!=null&&typeof r.id=="string"&&typeof r.filename=="string").map(r=>({id:r.id,slug:r.slug,integrity:r.integrity,byteSize:r.byteSize,repoId:r.repoId,filename:r.filename,kind:r.kind,visible:r.visible!==!1,summary:r.summary??null,summaryRetryAt:Number.isSafeInteger(r.summaryRetryAt)&&r.summaryRetryAt>0?r.summaryRetryAt:null,repoDirectory:typeof r.repoDirectory=="string"?r.repoDirectory:"",repoFullName:typeof r.repoFullName=="string"?r.repoFullName:"",commitInfo:O(r.commitInfo)})):[]}))):a==null?[]:e}function x(e){return e?.links===void 0?[]:Array.isArray(e.links)&&e.links.every(t=>Array.isArray(t)&&t.length>=2&&t.every(n=>typeof n=="string"))?e.links:null}function $(e){return C(e?.data)===null||typeof e.repo?.directory!="string"||e.repo.github!==null&&typeof e.repo.github!="string"||x(e)===null?null:{data:e.data,repo:e.repo,...e.links?{links:e.links}:{}}}async function P(e,{signal:t}={}){return $(await y(`/api/reports/${encodeURIComponent(e)}`,null,{signal:t}))}async function M(e,{signal:t}={}){let n=[...new Set(e)];if(n.length===0)return[];let o=await y("/api/reports/query",null,{method:"POST",signal:t,headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({ids:n})});if(!Array.isArray(o?.reports)||o.reports.length!==n.length)return null;let s=new Map;for(let l of o.reports){let i=$(l);if(!i||!n.includes(l.id)||s.has(l.id))return null;s.set(l.id,i)}let a=x(o);return a===null?null:e.map(l=>({...s.get(l),...a.length>0?{links:a}:{}}))}async function D(e,{signal:t,reportId:n=null}={}){let o=n===null?"":`?reportId=${encodeURIComponent(n)}`,s=await y(`/api/teams/${encodeURIComponent(e)}/reports${o}`,null,{signal:t});if(!Array.isArray(s?.reports))return null;let a=[],l=new Set;for(let r of s.reports){let m=$(r);if(!m||typeof r.id!="string"||typeof r.filename!="string"||l.has(r.id))return null;l.add(r.id),a.push({id:r.id,filename:r.filename,...m})}let i=x(s);return i===null?null:(Object.defineProperty(a,"links",{value:i}),a)}function w(e){return e?`?team=${encodeURIComponent(e)}`:""}async function L(e,{reportId:t,...n}={}){let o=t==null?"":`?reportId=${encodeURIComponent(t)}`,s=await y(`/api/teams/${encodeURIComponent(e)}/annotations${o}`,null,n),{reports:a,entries:l,comments:i,issues:r={}}=s??{};if(!a||typeof a!="object"||Array.isArray(a)||!l||typeof l!="object"||Array.isArray(l)||!Array.isArray(i)||!r||typeof r!="object"||Array.isArray(r)||Object.values(a).some(c=>!Array.isArray(c)||c.some(d=>typeof d!="string"))||i.some(c=>!c||typeof c.findingId!="string"))return null;let m=new Map;for(let[c,d]of i.entries()){let f=d.findingId,g=m.get(f)??[];g.push(c),m.set(f,g)}let j=new Map,A=new Map;return c=>{if(!Object.hasOwn(a,c))return null;if(A.has(c))return A.get(c);let d=JSON.stringify(a[c]),f=j.get(d);if(!f){let g=[...new Set(a[c])],U=g.flatMap(u=>m.get(u)??[]);f={entries:Object.fromEntries(g.filter(u=>Object.hasOwn(l,u)).map(u=>[u,l[u]])),comments:U.toSorted((u,k)=>u-k).map(u=>i[u]),issues:Object.fromEntries(g.filter(u=>Object.hasOwn(r,u)).map(u=>[u,r[u]]))},j.set(d,f)}return A.set(c,f),f}}async function J(e,t,n){let s=(await y(`/api/reports/${encodeURIComponent(e)}/triage${w(t)}`,null,n))?.entries;return s!=null&&typeof s=="object"&&!Array.isArray(s)?s:null}async function z(e,t,n=null){if(h())return[];let o=n===null?"":`?reportId=${encodeURIComponent(n)}`,s=await y(`/api/teams/${encodeURIComponent(e)}/fixes${o}`,null,{signal:t});return Array.isArray(s?.fixes)?s.fixes:null}async function K(e,t,n){let o=await y(`/api/reports/${encodeURIComponent(e)}/comments${w(t)}`,null,n);return Array.isArray(o?.comments)?o.comments:null}async function q(e,{findingId:t,body:n,commentId:o=null,version:s},a,l){let i=o==null?"":`/${encodeURIComponent(o)}`;try{let r=await p(`/api/reports/${encodeURIComponent(e)}/comments${i}${w(l)}`,{method:o==null?"POST":"PATCH",credentials:"same-origin",headers:{"content-type":"application/json",...a?{"x-csrf-token":a}:{}},body:JSON.stringify(o==null?{findingId:t,body:n}:{body:n,version:s})});return{status:r.status,comment:r.ok?(await r.json()).comment:null}}catch{return{status:0,comment:null}}}async function H(e,t,n,o,s){try{return(await p(`/api/reports/${encodeURIComponent(e)}/comments/${encodeURIComponent(t)}${w(s)}`,{method:"DELETE",credentials:"same-origin",headers:{"content-type":"application/json",...o?{"x-csrf-token":o}:{}},body:JSON.stringify({version:n})})).status}catch{return 0}}async function B(e,t,n,o){try{return(await p(`/api/reports/${encodeURIComponent(e)}/triage${w(o)}`,{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json",...n?{"x-csrf-token":n}:{}},body:JSON.stringify({entries:t})})).status}catch{return 0}}function G(e){e&&(location.href=e)}async function W(e){if(h()){location.href="/";return}try{await p("/api/auth/logout",{method:"POST",credentials:"same-origin",headers:e?{"x-csrf-token":e}:{}})}catch{}location.reload()}async function _(e,t){let n=await p("/api/auth/view-as",{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json",...t?{"x-csrf-token":t}:{}},body:JSON.stringify({userId:e})});if(!n.ok)throw new Error(`HTTP ${n.status}`);location.assign("/")}async function Q(e){try{await p("/api/auth/view-as",{method:"DELETE",credentials:"same-origin",headers:e?{"x-csrf-token":e}:{}})}catch{}location.assign(S["admin-users"])}async function V(e){let t=await p(`/api/teams/${encodeURIComponent(e)}/share`,{credentials:"same-origin"});if(!t.ok)throw new Error(`Could not load public links (${t.status})`);return(await t.json()).shares}async function X(e,t,{id:n,revoke:o=!1,dependencies:s=!1,security:a=!1}={}){let l=n?`/${encodeURIComponent(n)}`:"",i=await p(`/api/teams/${encodeURIComponent(e)}/share${l}`,{method:o?"DELETE":n?"PATCH":"POST",credentials:"same-origin",headers:{"x-csrf-token":t,"content-type":"application/json"},...o?{}:{body:JSON.stringify({dependencies:s,security:a})}});if(!i.ok)throw new Error(`Could not ${o?"revoke":n?"update":"create"} public link (${i.status})`);return i.json()}async function Y(e,t){let n=await p(`/api/bundles/${encodeURIComponent(e)}/download`,{credentials:"same-origin"});if(!n.ok)throw new Error(`Could not download bundle (${n.status})`);let o=URL.createObjectURL(await n.blob()),s=document.createElement("a");s.href=o,s.download=t,s.click(),setTimeout(()=>URL.revokeObjectURL(o),6e4)}export{T as a,F as b,P as c,M as d,D as e,w as f,L as g,J as h,z as i,K as j,q as k,H as l,B as m,G as n,W as o,_ as p,Q as q,V as r,X as s,Y as t};
1
+ import{d as p}from"./chunk-IU3CCINR.js";import{f as h,g as R}from"./chunk-UYAXVRVL.js";import{i as S}from"./chunk-WZDTZE64.js";import{J as C}from"./chunk-GNXOKIGP.js";async function y(e,t=null,n={}){let o;try{o=await p(e,{credentials:"same-origin",headers:{accept:"application/json"},...n})}catch{return t}if(o.status===401||o.status===403)return null;if(!o.ok)return t;try{return await o.json()}catch{return t}}async function T({fallback:e=null}={}){let t;try{let o=h(),s=await p(o?R(o):"/api/auth/session",{credentials:"same-origin",headers:{accept:"application/json"}});if(s.status===401||s.status===403)return null;if(!s.ok)return e;t=await s.json()}catch{return e}let n=t?.user;return n===null?null:n===void 0||typeof n.login!="string"?e:{id:n.id,login:n.login,name:typeof n.name=="string"?n.name:null,avatarUrl:typeof n.avatarUrl=="string"?n.avatarUrl:null,role:typeof n.role=="string"?n.role:"none",csrfToken:typeof t.csrfToken=="string"?t.csrfToken:null,...h()?{publicShare:!0}:{},...typeof t.viewer?.login=="string"?{viewer:{id:t.viewer.id,login:t.viewer.login,name:typeof t.viewer.name=="string"?t.viewer.name:null}}:{}}}function b(e){return e?.appMode===!1?{appMode:!1}:e?.appMode===!0&&Number.isSafeInteger(e.appFindings)&&e.appFindings>=0?{appMode:!0,appFindings:e.appFindings}:null}function O(e){if(typeof e?.sha!="string"||typeof e.github!="string"||!Array.isArray(e.tags))return null;let t=e.details,n=s=>typeof s=="string"?s:null,o=s=>Number.isSafeInteger(s)?s:null;return{sha:e.sha,github:e.github,tags:e.tags.filter(s=>typeof s=="string"),details:typeof t?.subject=="string"?{subject:t.subject,authorName:n(t.authorName),authorLogin:n(t.authorLogin),authoredAt:o(t.authoredAt),committedAt:o(t.committedAt)}:null}}async function F({fallback:e=[],signal:t,onRevision:n}={}){let o=h(),s=o?await y(R(o),null,{signal:t}):null,a=o?{teams:s?.team?[s.team]:[]}:await y("/api/teams",{teams:e},{signal:t}),l=a?.teams;return Array.isArray(l)?(n?.(typeof a.revision=="string"?a.revision:null),l.filter(i=>i!=null&&typeof i.id=="string"&&typeof i.name=="string").map(i=>({id:i.id,slug:i.slug,name:i.name,...!o&&i.dependencyReview===!0?{dependencyReview:!0}:{},...i.permissions?{permissions:{dependencies:i.permissions.dependencies===!0,security:i.permissions.security===!0}}:{},...typeof i.cacheKey=="string"?{cacheKey:i.cacheKey}:{},...b(i.app)?{app:b(i.app)}:{},reports:Array.isArray(i.reports)?i.reports.filter(r=>r!=null&&typeof r.id=="string"&&typeof r.filename=="string").map(r=>({id:r.id,slug:r.slug,filename:r.filename,visible:r.visible!==!1,...r.analyzer===null||typeof r.analyzer=="string"?{analyzer:r.analyzer}:{},repoFullName:typeof r.repoFullName=="string"?r.repoFullName:"",repoDirectory:typeof r.repoDirectory=="string"?r.repoDirectory:"",...typeof r.cacheKey=="string"?{cacheKey:r.cacheKey}:{}})):[],bundles:Array.isArray(i.bundles)?i.bundles.filter(r=>r!=null&&typeof r.id=="string"&&typeof r.filename=="string").map(r=>({id:r.id,slug:r.slug,integrity:r.integrity,byteSize:r.byteSize,repoId:r.repoId,filename:r.filename,kind:r.kind,visible:r.visible!==!1,summary:r.summary??null,summaryRetryAt:Number.isSafeInteger(r.summaryRetryAt)&&r.summaryRetryAt>0?r.summaryRetryAt:null,repoDirectory:typeof r.repoDirectory=="string"?r.repoDirectory:"",repoFullName:typeof r.repoFullName=="string"?r.repoFullName:"",commitInfo:O(r.commitInfo)})):[]}))):a==null?[]:e}function x(e){return e?.links===void 0?[]:Array.isArray(e.links)&&e.links.every(t=>Array.isArray(t)&&t.length>=2&&t.every(n=>typeof n=="string"))?e.links:null}function $(e){return C(e?.data)===null||typeof e.repo?.directory!="string"||e.repo.github!==null&&typeof e.repo.github!="string"||x(e)===null?null:{data:e.data,repo:e.repo,...e.links?{links:e.links}:{}}}async function P(e,{signal:t}={}){return $(await y(`/api/reports/${encodeURIComponent(e)}`,null,{signal:t}))}async function M(e,{signal:t}={}){let n=[...new Set(e)];if(n.length===0)return[];let o=await y("/api/reports/query",null,{method:"POST",signal:t,headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({ids:n})});if(!Array.isArray(o?.reports)||o.reports.length!==n.length)return null;let s=new Map;for(let l of o.reports){let i=$(l);if(!i||!n.includes(l.id)||s.has(l.id))return null;s.set(l.id,i)}let a=x(o);return a===null?null:e.map(l=>({...s.get(l),...a.length>0?{links:a}:{}}))}async function D(e,{signal:t,reportId:n=null}={}){let o=n===null?"":`?reportId=${encodeURIComponent(n)}`,s=await y(`/api/teams/${encodeURIComponent(e)}/reports${o}`,null,{signal:t});if(!Array.isArray(s?.reports))return null;let a=[],l=new Set;for(let r of s.reports){let m=$(r);if(!m||typeof r.id!="string"||typeof r.filename!="string"||l.has(r.id))return null;l.add(r.id),a.push({id:r.id,filename:r.filename,...m})}let i=x(s);return i===null?null:(Object.defineProperty(a,"links",{value:i}),a)}function w(e){return e?`?team=${encodeURIComponent(e)}`:""}async function L(e,{reportId:t,...n}={}){let o=t==null?"":`?reportId=${encodeURIComponent(t)}`,s=await y(`/api/teams/${encodeURIComponent(e)}/annotations${o}`,null,n),{reports:a,entries:l,comments:i,issues:r={}}=s??{};if(!a||typeof a!="object"||Array.isArray(a)||!l||typeof l!="object"||Array.isArray(l)||!Array.isArray(i)||!r||typeof r!="object"||Array.isArray(r)||Object.values(a).some(c=>!Array.isArray(c)||c.some(d=>typeof d!="string"))||i.some(c=>!c||typeof c.findingId!="string"))return null;let m=new Map;for(let[c,d]of i.entries()){let f=d.findingId,g=m.get(f)??[];g.push(c),m.set(f,g)}let j=new Map,A=new Map;return c=>{if(!Object.hasOwn(a,c))return null;if(A.has(c))return A.get(c);let d=JSON.stringify(a[c]),f=j.get(d);if(!f){let g=[...new Set(a[c])],U=g.flatMap(u=>m.get(u)??[]);f={entries:Object.fromEntries(g.filter(u=>Object.hasOwn(l,u)).map(u=>[u,l[u]])),comments:U.toSorted((u,k)=>u-k).map(u=>i[u]),issues:Object.fromEntries(g.filter(u=>Object.hasOwn(r,u)).map(u=>[u,r[u]]))},j.set(d,f)}return A.set(c,f),f}}async function J(e,t,n){let s=(await y(`/api/reports/${encodeURIComponent(e)}/triage${w(t)}`,null,n))?.entries;return s!=null&&typeof s=="object"&&!Array.isArray(s)?s:null}async function z(e,t,n=null){if(h())return[];let o=n===null?"":`?reportId=${encodeURIComponent(n)}`,s=await y(`/api/teams/${encodeURIComponent(e)}/fixes${o}`,null,{signal:t});return Array.isArray(s?.fixes)?s.fixes:null}async function K(e,t,n){let o=await y(`/api/reports/${encodeURIComponent(e)}/comments${w(t)}`,null,n);return Array.isArray(o?.comments)?o.comments:null}async function q(e,{findingId:t,body:n,commentId:o=null,version:s},a,l){let i=o==null?"":`/${encodeURIComponent(o)}`;try{let r=await p(`/api/reports/${encodeURIComponent(e)}/comments${i}${w(l)}`,{method:o==null?"POST":"PATCH",credentials:"same-origin",headers:{"content-type":"application/json",...a?{"x-csrf-token":a}:{}},body:JSON.stringify(o==null?{findingId:t,body:n}:{body:n,version:s})});return{status:r.status,comment:r.ok?(await r.json()).comment:null}}catch{return{status:0,comment:null}}}async function H(e,t,n,o,s){try{return(await p(`/api/reports/${encodeURIComponent(e)}/comments/${encodeURIComponent(t)}${w(s)}`,{method:"DELETE",credentials:"same-origin",headers:{"content-type":"application/json",...o?{"x-csrf-token":o}:{}},body:JSON.stringify({version:n})})).status}catch{return 0}}async function B(e,t,n,o){try{return(await p(`/api/reports/${encodeURIComponent(e)}/triage${w(o)}`,{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json",...n?{"x-csrf-token":n}:{}},body:JSON.stringify({entries:t})})).status}catch{return 0}}function G(e){e&&(location.href=e)}async function W(e){if(h()){location.href="/";return}try{await p("/api/auth/logout",{method:"POST",credentials:"same-origin",headers:e?{"x-csrf-token":e}:{}})}catch{}location.reload()}async function _(e,t){let n=await p("/api/auth/view-as",{method:"POST",credentials:"same-origin",headers:{"content-type":"application/json",...t?{"x-csrf-token":t}:{}},body:JSON.stringify({userId:e})});if(!n.ok)throw new Error(`HTTP ${n.status}`);location.assign("/")}async function Q(e){try{await p("/api/auth/view-as",{method:"DELETE",credentials:"same-origin",headers:e?{"x-csrf-token":e}:{}})}catch{}location.assign(S["admin-users"])}async function V(e){let t=await p(`/api/teams/${encodeURIComponent(e)}/share`,{credentials:"same-origin"});if(!t.ok)throw new Error(`Could not load public links (${t.status})`);return(await t.json()).shares}async function X(e,t,{id:n,revoke:o=!1,dependencies:s=!1,security:a=!1}={}){let l=n?`/${encodeURIComponent(n)}`:"",i=await p(`/api/teams/${encodeURIComponent(e)}/share${l}`,{method:o?"DELETE":n?"PATCH":"POST",credentials:"same-origin",headers:{"x-csrf-token":t,"content-type":"application/json"},...o?{}:{body:JSON.stringify({dependencies:s,security:a})}});if(!i.ok)throw new Error(`Could not ${o?"revoke":n?"update":"create"} public link (${i.status})`);return i.json()}async function Y(e,t){let n=await p(`/api/bundles/${encodeURIComponent(e)}/download`,{credentials:"same-origin"});if(!n.ok)throw new Error(`Could not download bundle (${n.status})`);let o=URL.createObjectURL(await n.blob()),s=document.createElement("a");s.href=o,s.download=t,s.click(),setTimeout(()=>URL.revokeObjectURL(o),6e4)}export{T as a,F as b,P as c,M as d,D as e,w as f,L as g,J as h,z as i,K as j,q as k,H as l,B as m,G as n,W as o,_ as p,Q as q,V as r,X as s,Y as t};
@@ -1,2 +1,2 @@
1
- import{g as a,h as u}from"./chunk-CVVJAXVY.js";import{r as o,s as h}from"./chunk-ABW5FVSN.js";import{a as c}from"./chunk-KYCNJVB7.js";import"./chunk-IU3CCINR.js";import"./chunk-UYAXVRVL.js";import"./chunk-PNHBZGDD.js";import"./chunk-CMQA4DM6.js";import"./chunk-3BZ7JERB.js";import"./chunk-HIV7SVI7.js";import"./chunk-GNXOKIGP.js";import{a as d,c as i,g as n}from"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-V5O7M2YT.js";import"./chunk-OOJM4CTU.js";var p=`.share-field{display:grid;gap:.35rem;margin-top:.8rem;font-size:.82rem}fieldset{display:grid;gap:.55rem;border:0;margin-top:1rem;font-size:.82rem}legend{margin-bottom:.55rem;font-weight:600}fieldset label{display:flex;align-items:center;gap:.5rem}input[type=checkbox]{accent-color:var(--accent)}.nwd-actions{flex-wrap:wrap}.revoke-all{margin-top:.75rem;border:0;background:none;color:var(--muted);font:inherit;font-size:.74rem}.revoke-all:hover:not(:disabled){color:var(--critical)}
1
+ import{g as a,h as u}from"./chunk-CVVJAXVY.js";import{r as o,s as h}from"./chunk-ZBBOBQ43.js";import{a as c}from"./chunk-KYCNJVB7.js";import"./chunk-IU3CCINR.js";import"./chunk-UYAXVRVL.js";import"./chunk-PNHBZGDD.js";import"./chunk-CMQA4DM6.js";import"./chunk-3BZ7JERB.js";import"./chunk-WZDTZE64.js";import"./chunk-GNXOKIGP.js";import{a as d,c as i,g as n}from"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-V5O7M2YT.js";import"./chunk-OOJM4CTU.js";var p=`.share-field{display:grid;gap:.35rem;margin-top:.8rem;font-size:.82rem}fieldset{display:grid;gap:.55rem;border:0;margin-top:1rem;font-size:.82rem}legend{margin-bottom:.55rem;font-weight:600}fieldset label{display:flex;align-items:center;gap:.5rem}input[type=checkbox]{accent-color:var(--accent)}.nwd-actions{flex-wrap:wrap}.revoke-all{margin-top:.75rem;border:0;background:none;color:var(--muted);font:inherit;font-size:.74rem}.revoke-all:hover:not(:disabled){color:var(--critical)}
2
2
  `;var l=class extends a{static styles=[...a.styles,d(p)];static properties={team:{attribute:!1},session:{attribute:!1},initialId:{attribute:!1},selectedId:{state:!0},links:{state:!0},dependencies:{state:!0},security:{state:!0},busy:{state:!0},message:{state:!0}};constructor(){super(),this.team=null,this.initialId="",this.selectedId="",this.links=[],this.dependencies=!1,this.security=!1,this.busy=!0,this.message="",this.urls=new Map}beforeOpen(){this.load(this.initialId)}select(s){let e=this.links.find(t=>t.id===s);this.selectedId=e?.id??"",this.dependencies=e?.permissions.dependencies===!0,this.security=e?.permissions.security===!0,this.message=""}async load(s=this.selectedId){this.busy=!0;try{let e=await o(this.team.id);return this._settled?void 0:(this.links=e,this.select(s),!0)}catch(e){return this.message=e.message,!1}finally{this.busy=!1}}async change(s=!1,e=!1){if(!this.busy){this.busy=!0,this.message="";try{let t=await h(this.team.id,this.session?.csrfToken,{id:e?void 0:this.selectedId||void 0,revoke:s,dependencies:this.dependencies,security:this.security});if(c.invalidate(["links","history"]),this._settled)return;t.path&&(this.urls.set(t.id,new URL(t.path,location.origin).href),this.links=[{id:t.id,createdAt:Date.now(),createdBy:this.session?.login??"",permissions:{dependencies:this.dependencies,security:this.security}},...this.links],this.selectedId=t.id),s&&(e?this.urls.clear():this.urls.delete(this.selectedId)),await this.load(s?"":t.id??this.selectedId)&&(this.message=s?e?"All public links revoked.":"Link revoked.":t.path?"Link created.":"Permissions saved. The link URL is unchanged.")}catch(t){this.message=t.message}finally{this.busy=!1}}}async copy(){try{await navigator.clipboard.writeText(this.urls.get(this.selectedId)),this.message="Link copied."}catch{this.message="Select the link and copy it."}}render(){let s=this.urls.get(this.selectedId);return i`<dialog @close="${this._onClose}"><header><h3>Share ${this.team?.name}</h3></header><p class="nwd-intro ui-hint">Anyone with this link can read this workspace’s published reports, comments, triage, and available source files without signing in.<br>New published reports will also be included.</p><label class="share-field">Public links <select class="nwd-input" ?disabled="${this.busy}" @change="${e=>this.select(e.target.value)}"><option value="" ?selected="${!this.selectedId}">Create a new link</option>${this.links.map(e=>i`<option value="${e.id}" ?selected="${this.selectedId===e.id}">${new Date(e.createdAt).toLocaleString()} · ${e.createdBy} · ${e.id.slice(0,8)}</option>`)}</select></label><fieldset ?disabled="${this.busy}"><legend>Include in this link</legend><label><input type="checkbox" .checked="${this.security}" @change="${e=>{this.security=e.target.checked}}"> Security findings and advisories</label> <label><input type="checkbox" .checked="${this.dependencies}" @change="${e=>{this.dependencies=e.target.checked}}"> Findings in dependencies</label></fieldset><p class="nwd-note ui-hint">Both options are off for new links.<br>Existing links keep their URL when permissions change.</p>${s?i`<label class="share-field">Public link<input class="nwd-input" readonly="readonly" .value="${s}" @focus="${e=>e.target.select()}"></label>`:n} ${this.message?i`<p class="nwd-note" role="status">${this.message}</p>`:n}<footer class="nwd-actions">${this.selectedId?i`<button class="danger" ?disabled="${this.busy}" @click="${()=>this.change(!0)}">Revoke link</button>`:n} <span class="nwd-spacer"></span> ${s?i`<button @click="${()=>this.copy()}">Copy link</button>`:n} <button class="primary" ?disabled="${this.busy}" @click="${()=>this.change()}">${this.selectedId?"Save changes":"Create public link"}</button> <button @click="${()=>this._finish(null)}">Close</button></footer>${this.links.length>0?i`<button class="revoke-all" ?disabled="${this.busy}" @click="${()=>this.change(!0,!0)}">Revoke all links for this workspace</button>`:n}</dialog>`}};customElements.define("managed-share-dialog",l);function w(r,s="",e=null){return u("managed-share-dialog",{team:r,initialId:s,session:e})}export{w as openManagedShareDialog};
@@ -1,4 +1,4 @@
1
- import{g as z,j as B,n as O,o as M,t as k,u as A,v as W,w as G,x}from"./chunk-F4OMDNEY.js";import{a as U,c as F}from"./chunk-35VE6CDH.js";import{a as P}from"./chunk-NRPC74AM.js";import{e as y}from"./chunk-W4J3MGLB.js";import{a as H}from"./chunk-GJ4IUCNS.js";import"./chunk-PNHBZGDD.js";import"./chunk-ZPD5R5RP.js";import"./chunk-DIJJNTRH.js";import"./chunk-HIV7SVI7.js";import{D as C}from"./chunk-GNXOKIGP.js";import"./chunk-C4Z6ZBXV.js";import{a as R,c as g,g as w}from"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-V5O7M2YT.js";import"./chunk-OOJM4CTU.js";var J=`h1{font-size:1.35rem;margin-bottom:.5rem}h2{font-size:1.1rem;margin-bottom:.5rem}.triage-import{display:flex;gap:1rem;align-items:center;margin:1.5rem 0 2rem}.triage-import .btn{flex-shrink:0}.triage-import p{margin:0}.workspace-drop{display:grid;gap:.8rem;padding:2rem;margin:1.5rem 0;border:1px dashed var(--border);border-radius:var(--ui-radius, 8px)}.workspace-drop.dragging{border-color:var(--accent);background:rgb(from var(--accent) r g b / .08)}.workspace-drop span,p,li span{color:var(--muted);line-height:1.5}.actions,.local-choice{display:flex;gap:.8rem;flex-wrap:wrap;align-items:center}.local-choice{margin-bottom:1.5rem}.import-preview{display:grid;gap:.8rem}input:not([type=radio]),select{padding:.55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--text);background:var(--bg);font:inherit}.import-preview input:not([type=radio]),.import-preview select{width:100%;box-sizing:border-box}fieldset{display:grid;gap:.8rem;padding:1rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px)}fieldset label{display:flex;gap:.5rem;align-items:center}li{padding:.4rem 0;overflow-wrap:anywhere}li span{display:block;font-size:.8rem}ul{padding-left:1.2rem}.primary{justify-self:start;color:var(--accent)}.error{color:var(--critical)}button:disabled{opacity:.5}input:focus-visible,select:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
1
+ import{g as z,j as B,n as O,o as M,t as k,u as A,v as W,w as G,x}from"./chunk-RSHMVYNS.js";import{a as U,c as F}from"./chunk-35VE6CDH.js";import{a as P}from"./chunk-NRPC74AM.js";import{e as y}from"./chunk-W4J3MGLB.js";import{a as H}from"./chunk-GJ4IUCNS.js";import"./chunk-PNHBZGDD.js";import"./chunk-4F6JSF57.js";import"./chunk-DIJJNTRH.js";import"./chunk-WZDTZE64.js";import{D as C}from"./chunk-GNXOKIGP.js";import"./chunk-C4Z6ZBXV.js";import{a as R,c as g,g as w}from"./chunk-2XUEZHIP.js";import"./chunk-TUII34K2.js";import"./chunk-V5O7M2YT.js";import"./chunk-OOJM4CTU.js";var J=`h1{font-size:1.35rem;margin-bottom:.5rem}h2{font-size:1.1rem;margin-bottom:.5rem}.triage-import{display:flex;gap:1rem;align-items:center;margin:1.5rem 0 2rem}.triage-import .btn{flex-shrink:0}.triage-import p{margin:0}.workspace-drop{display:grid;gap:.8rem;padding:2rem;margin:1.5rem 0;border:1px dashed var(--border);border-radius:var(--ui-radius, 8px)}.workspace-drop.dragging{border-color:var(--accent);background:rgb(from var(--accent) r g b / .08)}.workspace-drop span,p,li span{color:var(--muted);line-height:1.5}.actions,.local-choice{display:flex;gap:.8rem;flex-wrap:wrap;align-items:center}.local-choice{margin-bottom:1.5rem}.import-preview{display:grid;gap:.8rem}input:not([type=radio]),select{padding:.55rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px);color:var(--text);background:var(--bg);font:inherit}.import-preview input:not([type=radio]),.import-preview select{width:100%;box-sizing:border-box}fieldset{display:grid;gap:.8rem;padding:1rem;border:1px solid var(--border);border-radius:var(--ui-radius, 5px)}fieldset label{display:flex;gap:.5rem;align-items:center}li{padding:.4rem 0;overflow-wrap:anywhere}li span{display:block;font-size:.8rem}ul{padding-left:1.2rem}.primary{justify-self:start;color:var(--accent)}.error{color:var(--critical)}button:disabled{opacity:.5}input:focus-visible,select:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
2
2
  `;async function X(t,{session:p,confirmImport:n,...a}){if(p?.role!=="admin"||!p.csrfToken)throw new Error("An administrator session is required.");if(t!=null&&(typeof t!="object"||Array.isArray(t)))throw new Error("Invalid local triage.");let e=Object.create(null);for(let[l,h]of Object.entries(t??{})){let{ignoredReports:m,scopedIgnoredReports:d,...f}=y(h)??{};Object.keys(f).length!==0&&(e[l]=f)}let i=Object.keys(e).length,o=new Set,c=[],s;if(i>0)do{a.signal?.throwIfAborted();let l="/api/admin/reports/finding-ids"+(s?`?after=${encodeURIComponent(s)}`:""),{reports:h,nextCursor:m}=await a.api.send(l);a.signal?.throwIfAborted();for(let d of h){let f=d.findingIds.filter(u=>Object.hasOwn(e,u)&&!o.has(u));f.length>0&&c.push({id:d.id,ids:f});for(let u of f)o.add(u)}s=m}while(s);for(let l of o){if(!l||l.length>100)throw new Error(`Triage finding IDs must be between 1 and ${100} characters.`);if(x(e[l])==="invalid")throw new Error(`Triage for ${l} exceeds the managed server limits.`)}if(a.signal?.throwIfAborted(),n){let l=await n({matched:o.size,available:i});if(a.signal?.throwIfAborted(),!l)return null}let r=a.importedIds??new Set;for(let l of c)await j(e,{...a,importedIds:r,ids:l.ids,path:`/api/admin/reports/${encodeURIComponent(l.id)}/import-triage`});return o.size}function ae(t,p){let n=[],a=Object.create(null);for(let[e,i]of Object.entries(t)){let o=p[e];if(!o)throw new Error("The server did not return the requested triage snapshot.");let c=o.entry??{},s=a[e]={...c};delete s.comment;for(let[r,l]of Object.entries(i))if(r==="comment"){if(o.comments.some(h=>h.body===l))continue;o.comments.length>0?n.push({id:e,property:r,local:o.comments.map(h=>h.body).join(`
3
3
 
4
4
  `),imported:l}):s.comment=l}else if(c[r]!==void 0&&c[r]!==l){let h=m=>r==="flagged"?m?"flagged":"not flagged":m;n.push({id:e,property:r,local:h(c[r]),imported:h(l)})}else s[r]=l}return{entries:a,conflicts:n}}async function ce(t,p,n,a,e){e?.throwIfAborted();let{entries:i,conflicts:o}=ae(t,p);if(o.length===0)return i;let c=await a(o,n,{title:"Triage conflicts on import",intro:"disagree with stored triage on",trailingNote:"Imported comments are added alongside existing comments. Other choices apply to these finding IDs across all teams.",importedSideLabel:"Apply imported"});if(e?.throwIfAborted(),!c)throw Object.assign(new Error("Triage conflict resolution was cancelled."),{cancelled:!0});for(let s of o){let r=c[`${s.id}:${s.property}`];if(!["local","imported"].includes(r))throw new Error("Resolve every triage conflict before importing.");r==="imported"&&(i[s.id][s.property]=t[s.id][s.property])}return i}function le(t,p){let n=[],a={entries:{},expected:{}};for(let[e,i]of Object.entries(t)){let o={entries:{...a.entries,[e]:i},expected:{...a.expected,[e]:p[e].version}};if(new TextEncoder().encode(JSON.stringify(o)).length<=262144){a=o;continue}if(Object.keys(a.entries).length===0)throw new Error("This triage entry is too large to import.");n.push(a),a={entries:{[e]:i},expected:{[e]:p[e].version}}}return Object.keys(a.entries).length>0&&n.push(a),n}async function j(t,{api:p,path:n,ids:a=Object.keys(t),importedIds:e=new Set,lookup:i=new Map,resolveConflicts:o,signal:c}){a=a.filter(s=>Object.hasOwn(t,s)&&!e.has(s));for(let s=0;s<a.length;s+=200){let r=a.slice(s,s+200);for(let l=0;l<5&&r.length>0;l++){c?.throwIfAborted();let{snapshots:h}=await p.send(n,{findingIds:r}),m=Object.fromEntries(r.map(f=>[f,t[f]])),d=await ce(m,h,i,o,c);for(let f of le(d,h)){if(c?.throwIfAborted(),(await p.send(n,f)).conflict)break;Object.keys(f.entries).forEach(u=>e.add(u))}r=r.filter(f=>!e.has(f))}if(r.length>0)throw new Error("Stored triage keeps changing. Retry to resolve it against the latest values.")}}var N="You can retry the remaining steps.";function T(t){return String(t?.detail??t?.message??t).replace(/\.$/u,"")}function S(t,p){return p?.aborted===!0||t?.name==="AbortError"||t?.cancelled===!0}function K(t){if(typeof t!="string")return{ok:!0,path:null};if(/\p{Cc}/u.test(t)||t.includes("\\")||t!==t.trim())return{ok:!1};let p=[];for(let a of t.split("/"))if(!(a===""||a===".")){if(a===".."||a!==a.trim())return{ok:!1};p.push(a)}let n=p.join("/");return n.length>500?{ok:!1}:{ok:!0,path:n===""?null:n}}async function V(t,p){let n=new Uint8Array(await t.arrayBuffer());return B(n)?p({tryPassword:a=>O(n,a)}):n[0]===31&&n[1]===139?O(n):M(new TextDecoder("utf-8",{fatal:!0}).decode(n))}function Y(t,p,n,a,e=""){let i=t?P(t,p,a,e):null,o=n.find(c=>i?c.repoId===i.repoId:c.fullName.toLowerCase()===t?.toLowerCase());return{repoId:o?.repoId??null,directory:i?.directory??p,github:o?.fullName??t}}async function q(t,p,n=[]){let a=new Map,e=[];for(let s of t.reports){if(typeof s?.name!="string"||!s.name||typeof s.content!="string")throw new Error("Every report must have a name and content.");let r=k(s.content,s.name);if(!r.data)throw new Error(`${s.name}: ${r.reason??"Unsupported report"}`);let l=C(r.data),m=l??C(s)??C({repo:{github:t.repoUrls?.[s.name]}})??W(r.data),d=l?"":G(r.data),f=K(r.data.repo?.directory);if(!f.ok)throw new Error(`${s.name}: invalid repository directory`);let u=r.format==="links"?[]:(await A(s.content,s.name))?.findings??[];for(let b of u)b.id&&a.set(b.id,b);let I=f.path??"";e.push({...s,links:r.format==="links",...Y(m,I,p,n,d),declaredGithub:m,declaredDirectory:I,filePrefix:d,embedded:l,ids:[...new Set(u.map(b=>b.id).filter(Boolean))],uploaded:null})}let i=Object.create(null);if(t.triage!=null&&(typeof t.triage!="object"||Array.isArray(t.triage)))throw new Error("Invalid workspace triage.");let o=await z(t.triage,s=>t.reports.find(r=>r.name===s)?.content);for(let[s,r]of Object.entries(o.entries)){if(!a.has(s))continue;let l=y(r);if(!l)continue;let{ignoredReports:h,scopedIgnoredReports:m,...d}=l;Object.keys(d).length!==0&&(i[s]=d)}let c=[];for(let s of t.bundleBlobs??[]){let r=Uint8Array.fromBase64(s.data),l=`sha512-${new Uint8Array(await crypto.subtle.digest("SHA-512",r)).toBase64()}`;if(l!==s.integrity)throw new Error(`${s.name}: bundle integrity mismatch`);c.push({name:s.name,integrity:l,bytes:r,uploaded:null})}return{name:t.workspace.name.slice(0,100),reports:e,bundles:c,triage:i,lookup:a,references:t.bundles??[],team:null,completed:new Set,importedIds:new Set}}function $(t,p,n){async function a(e,i,o={}){n?.throwIfAborted();let c=await t(e,{credentials:"same-origin",signal:n,...i===void 0?{}:{method:"POST",body:i instanceof File?i:JSON.stringify(i)},headers:{...i instanceof File?{}:{"content-type":"application/json"},"x-csrf-token":p.csrfToken,...o}});if(n?.throwIfAborted(),c.status===409)return{conflict:!0};if(!c.ok){let r=await c.json().then(h=>typeof h?.error=="string"?h.error:"",()=>"");n?.throwIfAborted();let l=`Import request failed (HTTP ${c.status}${r?`: ${r}`:""}).`;throw Object.assign(new Error(`${l} ${N}`),{detail:l})}let s=await c.json();return n?.throwIfAborted(),s}return{send:a}}async function de(t,p,n,a,e,i){if(t.bundles.length===0&&t.references.length===0)return;let o=e??(await n.send("/api/admin/bundles")).bundles,c=new Set(t.bundles.map(r=>r.uploaded.id));if([...c].some(r=>!o.some(l=>l.id===r)))throw new Error("Could not verify the uploaded source bundles. Retry the import.");let s=new Set(t.references);for(let r of o){if(!c.has(r.id)&&!s.has(r.integrity))continue;let l=!i.has(r.repoId),h=l?p:r.repoId;l&&await a(`bundle-repo:${r.id}:${h}`,()=>n.send("/api/admin/bundles/set-repo",{bundleId:r.id,repoId:h}));let m=l?"":r.repoDirectory??"";await a(`repo:${h}:${m}`,()=>n.send("/api/admin/teams/set-repo",{teamId:t.team.id,repoId:h,path:m}))}}async function pe(t,p){t.uploaded||(t.uploaded=await p.send("/api/admin/deduplication",new File([t.content],t.name),{"x-report-filename":encodeURIComponent(t.name)}))}async function he(t,p){let n=(await p.send("/api/admin/repositories/browsable")).repos,a=t.reports.filter(e=>!e.links&&e.declaredGithub&&!e.uploaded);if(a.length>0){let{aliases:e=[]}=await p.send("/api/admin/repositories/aliases");for(let i of a)Object.assign(i,Y(i.declaredGithub,i.declaredDirectory,n,e,i.filePrefix))}return new Set(n.map(e=>e.repoId))}async function me(t,{plan:p,api:n,step:a,activeRepos:e,defaultRepo:i,includeTriage:o,resolveConflicts:c,signal:s}){if(t.links){await pe(t,n);return}let r=e.has(t.repoId)?t.repoId:i;if(!t.uploaded){let m=await n.send("/api/admin/reports",new File([t.content],t.name),{"x-report-filename":encodeURIComponent(t.name),"x-repo-id":String(r),"x-repo-directory":encodeURIComponent(t.directory)});if(m.conflict)throw new Error(`Could not reuse the stored report ${t.name}. Retry the import.`);t.uploaded=m}let l=t.uploaded;e.has(l.repoId)||await a(`report-repo:${l.id}:${r}:${t.directory}`,async()=>{if((await n.send("/api/admin/reports/set-repo",{reportId:l.id,repoId:r,directory:t.directory})).conflict)throw new Error(`Could not assign the stored report ${t.name} to its repository.`);l.repoId=r,l.repoDirectory=t.directory});let h=l.repoDirectory??"";await a(`repo:${l.repoId}:${h}`,()=>n.send("/api/admin/teams/set-repo",{teamId:p.team.id,repoId:l.repoId,path:h})),o&&await j(p.triage,{api:n,resolveConflicts:c,signal:s,ids:t.ids,importedIds:p.importedIds,lookup:p.lookup,path:`/api/admin/reports/${encodeURIComponent(t.uploaded.id)}/import-triage`}),await a(`publish:${t.uploaded.id}`,()=>n.send("/api/admin/reports/set-visible",{reportId:t.uploaded.id,visible:!0}))}async function Q(t,{api:p,session:n,defaultRepo:a,includeTriage:e,resolveConflicts:i,signal:o,progress:c=()=>{}}){if(n?.role!=="admin"||!n.csrfToken)throw new Error("An administrator session is required.");if(!t.name.trim()||t.name.trim().length>100)throw new Error("Enter a team name of up to 100 characters.");if(e)for(let[d,f]of Object.entries(t.triage)){if(!d||d.length>100)throw new Error(`Triage finding IDs must be between 1 and ${100} characters. Choose Skip triage to import the files without it.`);if(x(f)==="invalid")throw new Error(`Triage for ${d} exceeds the managed server limits. Choose Skip triage to import the files without it.`)}o?.throwIfAborted();let s=null;if(t.bundles.length===0){let d=new Set(t.references);s=d.size>0?(await p.send("/api/admin/bundles")).bundles.filter(f=>d.has(f.integrity)):[]}if(t.reports.length===0&&t.bundles.length===0&&s.length===0)throw new Error(t.references.length>0?"None of the referenced source bundles are available on the server. Export with bundle bytes included and try again.":"This workspace contains no report or bundle files.");let r=await he(t,p);for(let d of t.reports.filter(f=>!f.links)){if(d.embedded&&!r.has(d.repoId))throw new Error(`Connect ${d.embedded} in Repositories before importing ${d.name}.`);if(!r.has(d.repoId)&&!r.has(a))throw new Error(`Choose an active repository for ${d.name}.`)}if((t.bundles.length>0||s.some(d=>!r.has(d.repoId)))&&!r.has(a))throw new Error("Choose an active repository for the source bundles.");let l=()=>o?.throwIfAborted(),h=async(d,f)=>{l(),t.completed.has(d)||(await f(),t.completed.add(d))};if(l(),!t.team){let d=await p.send("/api/admin/teams",{name:t.name.trim()});if(d.conflict)throw new Error("A team already has this name. Choose another name.");t.team=d}await h("member",()=>p.send("/api/admin/teams/set-member",{teamId:t.team.id,userId:n.id,security:!0,dependencies:!0}));for(let d of t.bundles)l(),c(`Importing ${d.name}\u2026`),d.uploaded||(d.uploaded=await p.send("/api/admin/bundles",new File([d.bytes],d.name),{"x-bundle-filename":encodeURIComponent(d.name)}));await de(t,a,p,h,s,r);let m=[];for(let d of t.reports){l(),c(`Importing ${d.name}\u2026`);try{await me(d,{plan:t,api:p,step:h,activeRepos:r,defaultRepo:a,includeTriage:e,resolveConflicts:i,signal:o})}catch(f){if(S(f,o))throw f;m.push(`${d.name}: ${T(f)}`)}}if(m.length>0)throw new Error(`Could not import ${m.length} of ${t.reports.length} files: ${m.join("; ")}. ${N}`);return t.team}function D(t){let p=()=>t.isEncryptionEnabled()&&!t.isUnlocked();return{get locked(){return p()},unlock:n=>t.unlockEncryption(n),async read({signal:n}={}){let a=!1,e=t.onVaultStateChange(()=>{a=!0}),i=()=>{if(n?.throwIfAborted(),p()||a)throw new Error("Local data was locked or changed. Unlock it and import triage again.")};try{i();let o=await t.readTriageBlob();return i(),o}finally{e()}}}}function L(t){let p=()=>t.isEncryptionEnabled()&&!t.isUnlocked();async function n(){let e=JSON.parse(await t.hydrateKey("deepview.workspaces")||"[]");return(Array.isArray(e)?e:e.workspaces??[]).filter(i=>typeof i.id=="string"&&typeof i.name=="string")}async function a(e,i){let o=!1,c=[t.onVaultStateChange,t.onFileMutated,t.onBundleMutated].map(r=>r(()=>{o=!0})),s=()=>{if(i?.throwIfAborted(),p()||o)throw new Error("Local data was locked or changed. Unlock it and select the workspace again.")};try{s();let r=await e(s);return s(),r}finally{c.forEach(r=>r())}}return{get locked(){return p()},unlock:e=>t.unlockEncryption(e),list:({signal:e}={})=>a(async()=>(await n()).map(i=>({id:i.id,name:i.name})),e),read:(e,{signal:i}={})=>a(async o=>{let c=(await n()).find(f=>f.id===e);if(!c)throw new Error("This local workspace no longer exists.");let s=JSON.stringify(c),r=JSON.parse(await t.hydrateKey("deepview.repoUrls")||"{}"),l=[];for(let f of c.reports??[]){o();let u=await t.withStoredItem("report",f,()=>t.readFile(f));o(),l.push({name:f,content:u,...r[f]?{repo:{github:r[f]}}:{}})}let h=await t.listBundles(),m=[];for(let f of c.bundles??[]){o();let u=h.find(b=>b.integrity===f);if(!u)continue;let I=await t.withStoredItem("bundle",f,()=>t.readBundle(f));o(),m.push({integrity:f,name:u.name,data:I.toBase64()})}let d=await t.readTriageBlob()??{};if(JSON.stringify((await n()).find(f=>f.id===e))!==s)throw new Error("The local workspace changed. Select it again.");return{version:1,workspace:{id:e,name:c.name,privateKey:""},reports:l,bundles:c.bundles??[],bundleBlobs:m,triage:d,repoUrls:r}},i)}}var v=t=>t==="bundle"?"bundles":"reports",Z=(t,p)=>JSON.stringify([t,p||""]),ee=(t,p)=>new Set(p.map(n=>t==="bundle"?n.integrity:Z(n.sha256,n.analyzer)));async function te(t){let p=new Uint8Array(await t.arrayBuffer()),n=k(new TextDecoder().decode(p),t.name);if(!n.data)throw new Error(n.reason??"Not a recognized report");let a=new Uint8Array(await crypto.subtle.digest("SHA-256",p)).toBase64({alphabet:"base64url",omitPadding:!0});return{hash:a,key:Z(a,typeof n.data.source=="string"?n.data.source:null)}}async function re(t,{source:p,deps:n,api:a,signal:e}){let i=JSON.parse(await n.hydrateKey("deepview.workspaces")||"[]"),o=(Array.isArray(i)?i:i.workspaces??[]).filter(m=>typeof m.id=="string"&&typeof m.name=="string");e.throwIfAborted();let c=await p.list(t),s=ee(t,(await a.send(`/api/admin/${v(t)}`))[v(t)]),r=o.map(m=>({id:m.id,name:m.name,items:[]})),l={id:null,name:"Not in a workspace",items:[]},h=[];for(let m of c){e.throwIfAborted();let d={value:m.value,name:m.label,key:m.value,synced:!1,present:!1,error:""};if(t==="report")try{Object.assign(d,await p.importItem(t,d.value,te,{signal:e})),d.syncHash=await n.reportSyncHash(d.value)}catch(u){e.throwIfAborted(),d.error=String(u?.message??u)}e.throwIfAborted(),d.present=s.has(d.key);let f=!1;o.forEach((u,I)=>{if(!u[v(t)]?.includes(d.value))return;let b=n.localContentSyncStatus(u.id,t,d.value,d.syncHash);d.synced||=b.synced,r[I].items.push({item:d,...b}),f=!0}),f||l.items.push({item:d,synced:!1,cached:!1}),h.push(d)}return{kind:t,items:h,groups:[...r,l].filter(m=>m.items.length>0)}}async function oe(t,p,{source:n,api:a,signal:e,progress:i=()=>{},imported:o=new Set}){let{kind:c}=t,s=ee(c,(await a.send(`/api/admin/${v(c)}`))[v(c)]),r=new Set(p),l=[],h=0;for(let m of t.items)if(e.throwIfAborted(),!(!r.has(m.value)||m.error||m.present)){if(s.has(m.key)){m.present=!0;continue}i(`Importing ${m.name}\u2026`),h++;try{await n.importItem(c,m.value,async d=>{let f=c==="report"?(await te(d)).key:await H(new Uint8Array(await d.arrayBuffer()));if(e.throwIfAborted(),f!==m.key)throw new Error(`${m.name} changed. Choose files again before importing.`);if((await a.send(`/api/admin/${v(c)}`,d,{[`x-${c}-filename`]:encodeURIComponent(d.name)})).conflict)throw new Error(`Could not import ${m.name}. Try again.`)},{signal:e})}catch(d){if(S(d,e))throw d;l.push(`${m.name}: ${T(d)}`);continue}s.add(m.key),m.present=!0,o.add(m.value)}if(l.length>0)throw new Error(`Imported ${h-l.length} of ${h} ${c}s. Could not import ${l.join("; ")}. Import again to retry them.`);return o.size}var fe=(t,p)=>t===void 0?"managed-only":p===void 0?"local-only":"mismatch";function ue(t,p){let n=p.slice(),a=t.map(o=>{let c=n.indexOf(o);return c!==-1&&n.splice(c,1),{text:o,different:c===-1}}),e=t.slice(),i=p.map(o=>{let c=e.indexOf(o);return c!==-1&&e.splice(c,1),{text:o,different:c===-1}});return!a.some(o=>o.different)&&!i.some(o=>o.different)?null:{property:"comment",local:a,managed:i,kind:a.some(o=>o.different)?i.some(o=>o.different)?"mismatch":"local-only":"managed-only"}}function ge(t,p){let n=y(t)??{},a=y(p.entry)??{},e=[];for(let o of["triage","color","fix","flagged"])n[o]!==a[o]&&e.push({property:o,local:n[o],managed:a[o],kind:fe(n[o],a[o])});let i=ue(n.comment?[n.comment]:[],p.comments.map(o=>o.body));return i&&e.push(i),n.ignoredReports?.length&&e.push({property:"ignoredReports",local:[...new Set(n.ignoredReports)],managed:void 0,kind:"local-only"}),e}async function we(t,{lookup:p,triage:n,matched:a,findings:e,api:i,signal:o}){let c=[...new Set(t.findingIds)].filter(s=>p.has(s)&&!a.has(s));for(let s=0;s<c.length;s+=200){let r=c.slice(s,s+200);if(r.some(h=>h.length>100))throw new Error("A shared finding ID exceeds the managed triage limit.");o.throwIfAborted();let{snapshots:l}=await i.send(`/api/admin/reports/${encodeURIComponent(t.id)}/import-triage`,{findingIds:r});o.throwIfAborted();for(let h of r){if(!l?.[h])throw new Error("The server did not return the requested triage snapshot.");let m=ge(n[h],l[h]);m.length>0&&e.push({id:h,finding:p.get(h),differences:m}),a.add(h)}}}async function ie({source:t,readTriage:p,api:n,signal:a,progress:e=()=>{}}){let i=new Map,o=[];for(let h of await t.list("report")){a.throwIfAborted(),e(`Reading ${h.label}\u2026`);try{let m=await t.importItem("report",h.value,async d=>{let f=await d.text(),u=k(f,d.name);if(!u.data)throw new Error(u.reason??"Not a recognized report");return u.format==="links"?[]:(await A(f,d.name))?.findings??[]},{signal:a});a.throwIfAborted();for(let d of m)typeof d.id!="string"||!d.id||(i.has(d.id)||i.set(d.id,{...d,reports:[]}),i.get(d.id).reports.push(h.label))}catch(m){a.throwIfAborted(),o.push({name:h.label,reason:String(m?.message??m)})}}let c=await p()??{};if(a.throwIfAborted(),typeof c!="object"||Array.isArray(c))throw new Error("Invalid local triage.");let s=[],r=new Set;if(i.size===0)return{matched:0,localFindings:0,findings:s,skipped:o};let l;do{a.throwIfAborted(),e("Comparing local and managed triage\u2026");let h=await n.send("/api/admin/reports/finding-ids"+(l?`?after=${encodeURIComponent(l)}`:""));a.throwIfAborted();for(let m of h.reports)await we(m,{lookup:i,triage:c,matched:r,findings:s,api:n,signal:a});l=h.nextCursor}while(l);return a.throwIfAborted(),{matched:r.size,localFindings:i.size,findings:s,skipped:o}}function be(t,p){if(customElements.get("managed-admin-import"))return;class n extends t{static styles=[R(F),R(J)];static properties={localDeps:{attribute:!1},_busy:{state:!0},_error:{state:!0},_message:{state:!0},_plan:{state:!0},_catalog:{state:!0},_localOpen:{state:!0},_workspaces:{state:!0},_localId:{state:!0},_triage:{state:!0},_repo:{state:!0},_drag:{state:!0}};constructor(){super(),this._busy=!1,this._error="",this._message="",this._plan=null,this._catalog=null,this._workspaces=[],this._localOpen=!1,this._localId="",this._triage="",this._repo=null,this._files=[],this._drag=!1,this._local=!1,this._over=e=>{e.dataTransfer?.types?.includes("Files")&&(e.preventDefault(),this._drag=!0)},this._drop=e=>{e.dataTransfer?.types?.includes("Files")&&(e.preventDefault(),e.stopPropagation(),this._drag=!1,this._busy||(this._files.push(...e.dataTransfer.files),this._nextFile()))},this._localChanged=()=>{this._workspaces=[],this._localId="",!this._unlocking&&(this._local&&(this._plan=null),(this._local||this._importingTriage||this._importingContent||this._comparingTriage)&&(this._operation?.abort(),this._message="",this._error=this._comparingTriage?"Local data changed or was locked. Compare triage again to continue.":this._importingContent?"Local data changed or was locked. Choose files again to continue.":this._importingTriage?"Local data changed or was locked. Import triage again to continue.":"Local data changed or was locked. Choose the workspace again."))},this._blur=()=>{this._readingLocal&&this._localChanged()}}connectedCallback(){super.connectedCallback(),this.addEventListener("dragover",this._over),this.addEventListener("drop",this._drop),globalThis.addEventListener("blur",this._blur),globalThis.addEventListener("storage",this._localChanged),this._offVault=this.localDeps?.onVaultStateChange(this._localChanged),this._loadCatalog()}disconnectedCallback(){this._operation?.abort(),this._offVault?.(),this._plan=null,this._files=[],this.removeEventListener("dragover",this._over),this.removeEventListener("drop",this._drop),globalThis.removeEventListener("blur",this._blur),globalThis.removeEventListener("storage",this._localChanged),super.disconnectedCallback()}updated(e){e.has("session")&&(this._role!=="admin"||e.get("session")?.id!==this.session?.id)&&(this._operation?.abort(),this._plan=null,this._files=[])}async _action(e){if(this._busy||this._role!=="admin")return;let i=this._operation=new AbortController,o=AbortSignal.any([i.signal,this.appState.sessionController.signal]);this._busy=!0,this._error="";try{await e(o),o.throwIfAborted()}catch(c){o.aborted||(this._error=String(c?.message??c))}finally{this._operation===i&&(this._busy=!1)}}async _loadCatalog(){if(this._role==="admin")try{await this._loadCollection("workspace-import:catalog","import options",async e=>{let i=$(p,this.session,e),[o,c,s,r]=await Promise.all([i.send("/api/admin/reports"),i.send("/api/admin/teams"),i.send("/api/admin/bundles"),i.send("/api/admin/repositories/aliases")]);return{repos:o.repos,teams:c.teams,bundles:s.bundles,aliases:r.aliases}},e=>{this._catalog=e})}catch(e){this._error=String(e?.message??e)}}_browse(){let e=document.createElement("input");e.type="file",e.multiple=!0,e.accept=".enc,.gz,.json",e.addEventListener("change",()=>{this._files.push(...e.files),this._nextFile()},{once:!0}),e.click()}async _prepare(e,i){if(!e)return;if(this._catalog||await this._loadCatalog(),i.throwIfAborted(),!this._catalog)throw new Error("Could not load repositories. Try again.");let o=await q(e,this._catalog.repos,this._catalog.aliases);i.throwIfAborted();let c=new Set(this._catalog.teams.map(h=>h.name)),s=o.name||"Imported workspace",r=2;for(;c.has(o.name);){let h=` (${r++})`;o.name=s.slice(0,100-h.length)+h}let l=new Set(o.reports.map(h=>h.repoId).filter(h=>h!=null));this._repo=l.size===1?[...l][0]:null,this._triage=Object.keys(o.triage).length>0?"":"skip",this._plan=o,this._message=""}async _nextFile(){if(this._files.length===0||this._busy)return;let e=this._files.shift();this._local=!1,this._plan=null,await this._action(async i=>{let o=await V(e,this.promptPassword);i.throwIfAborted(),await this._prepare(o,i)})}async _unlock(e,i){this._unlocking=!0;try{return!e.locked||await e.unlock({signal:i})}finally{this._unlocking=!1}}async _chooseLocal(){this._localOpen=!0,await this._action(async e=>{let i=L(this.localDeps);await this._unlock(i,e)&&(e.throwIfAborted(),this._workspaces=await i.list({signal:e}))})}async _readLocal(){if(!this._localId)return;let e=this._localId;this._local=!0,this._plan=null,await this._action(async i=>{let o=L(this.localDeps);if(await this._unlock(o,i)){this._readingLocal=!0;try{await this._prepare(await o.read(e,{signal:i}),i)}finally{this._readingLocal=!1}}})}async _import(){!this._plan||!this._triage||!this._csrf||(await this._action(async e=>{if(this._local&&L(this.localDeps).locked)throw new Error("Unlock local data and choose the workspace again.");let i=this._plan,o=["teams","reports","bundles","history","workspace-import","scan-sources","repo-impact"];try{let c=await this.appState.mutate(()=>Q(i,{api:$(p,this.session,e),session:this.session,defaultRepo:this._repo,includeTriage:this._triage==="include",resolveConflicts:this.resolveConflicts,signal:e,progress:s=>{this._message=s}}),o);this._catalog.teams.push(c),this._message=`Imported into ${c.name}.`,this._plan=null}finally{this.appState.invalidate(o),i.team&&this.dispatchEvent(new CustomEvent("managed-import-complete",{bubbles:!0,composed:!0}))}}),!this._plan&&!this._error&&await this._nextFile())}async _importLocalTriage(){this._csrf&&await this._action(async e=>{this._importingTriage=!0,this._message="";let i=new Set,o=["reports","history"];try{let c=D(this.localDeps);if(!await this._unlock(c,e))return;this._readingLocal=!0;let s;try{s=await c.read({signal:e})}finally{this._readingLocal=!1}let r=await X(s,{api:$(p,this.session,e),session:this.session,resolveConflicts:this.resolveConflicts,signal:e,importedIds:i,confirmImport:async l=>(await this.confirmTriageImport({...l,signal:e}))?.confirmed===!0});if(e.throwIfAborted(),r===null)return;this._message=r?`Imported triage for ${r} finding${r===1?"":"s"}.`:"No local triage matches findings in managed reports."}finally{this._importingTriage=!1,this.appState.invalidate(o),i.size>0&&this.dispatchEvent(new CustomEvent("managed-import-complete",{bubbles:!0,composed:!0}))}})}async _compareLocalTriage(){this._csrf&&await this._action(async e=>{this._comparingTriage=!0,this._message="";let i=this.localImportSource,o=i.subscribe(this._localChanged);try{if(!await this._unlock(i,e))return;e.throwIfAborted(),this._readingLocal=!0;let c=D(this.localDeps),s=await ie({source:i,signal:e,readTriage:()=>c.read({signal:e}),api:$(p,this.session,e),progress:r=>{this._message=r}});e.throwIfAborted(),this._message="",await this.showTriageComparison({comparison:s,signal:e})}finally{o(),this._readingLocal=!1,this._comparingTriage=!1,this._message=""}})}async _importLocalContent(e){this._csrf&&await this._action(async i=>{this._importingContent=!0,this._message="";let o=this.localImportSource,c=["reports","bundles","bundle-metadata","history","workspace-import","scan-sources","repo-impact"],s=new Set,r=o.subscribe(this._localChanged);try{if(!await this._unlock(o,i))return;i.throwIfAborted(),this._readingLocal=!0;let l=$(p,this.session,i),h=await re(e,{source:o,deps:this.localDeps,api:l,signal:i}),m=await this.confirmContentImport({plan:h,signal:i});if(i.throwIfAborted(),!m?.confirmed)return;let d=await oe(h,m.selected,{source:o,api:l,signal:i,imported:s,progress:f=>{this._message=f}});this._message=`Imported ${d} ${e}${d===1?"":"s"}.`}finally{r(),this._readingLocal=!1,this._importingContent=!1,this.appState.invalidate(c),s.size>0&&this.dispatchEvent(new CustomEvent("managed-import-complete",{bubbles:!0,composed:!0}))}})}render(){if(this._role!=="admin")return w;let e=this._plan,i=e?Object.keys(e.triage).length:0,o=new Set([...e?.references??[],...e?.bundles.map(r=>r.integrity)??[]]),c=(this._catalog?.bundles??[]).filter(r=>o.has(r.integrity)),s=e?.references.filter(r=>!e.bundles.some(l=>l.integrity===r)).length??0;return g`<div class="wrap" @dragleave="${()=>{this._drag=!1}}">${U("manage-import",this._role,this.allowShare)}<h1>Import</h1><section class="triage-import" aria-label="Import local files"><div class="actions"><button type="button" class="btn" ?disabled="${this._busy||!this._csrf}" @click="${()=>this._importLocalContent("bundle")}">Import bundles</button> <button type="button" class="btn" ?disabled="${this._busy||!this._csrf}" @click="${()=>this._importLocalContent("report")}">Import reports</button></div><p>Choose files from this browser, grouped by workspace. Import files without teams or triage.</p></section><section class="triage-import" aria-label="Local triage"><div class="actions"><button type="button" class="btn" ?disabled="${this._busy||!this._csrf}" @click="${()=>this._importLocalTriage()}">Import triage</button> <button type="button" class="btn" ?disabled="${this._busy||!this._csrf}" @click="${()=>this._compareLocalTriage()}">Compare triage</button></div><p>Import saved triage and comments for findings already in managed reports.<br>Unmatched data stays in this browser.<br>Conflicting values prompt for resolution; per-report ignores are skipped.</p></section><h2>Import workspace</h2><p class="intro ui-hint">Create a new team from a workspace export or a workspace stored in this browser.</p><section class="${`workspace-drop ${this._drag?"dragging":""}`}" aria-label="Workspace files"><strong>Drop workspace files here</strong><span>Encrypted exports, JSON, or compressed JSON. Encrypted files prompt for a password.</span><div class="actions"><button type="button" class="btn" ?disabled="${this._busy||!this._catalog}" @click="${()=>this._browse()}">Choose files</button> <button type="button" class="btn" ?disabled="${this._busy}" @click="${()=>this._chooseLocal()}">Choose local workspace</button></div></section>${this._localOpen?g`<section class="local-choice"><label for="local-workspace">Local workspace</label> <select id="local-workspace" .value="${this._localId}" ?disabled="${this._busy}" @change="${r=>{this._localId=r.target.value}}"><option value="">Choose a workspace…</option>${this._workspaces.map(r=>g`<option value="${r.id}">${r.name}</option>`)}</select> <button type="button" class="btn" ?disabled="${this._busy||!this._localId}" @click="${()=>this._readLocal()}">Select workspace</button> ${!this._busy&&this._workspaces.length===0?g`<p class="ui-hint">No unlocked local workspaces. Choose local workspace to unlock or refresh.</p>`:w}</section>`:w} ${e?g`<section class="import-preview" aria-label="Import options">${e.team?g`<p>Team ${e.team.name} has been created. Retry continues its remaining import steps.</p>`:w} <label for="import-team">New team name</label><input id="import-team" maxlength="100" .value="${e.name}" ?disabled="${this._busy||!!e.team}" @input="${r=>{e.name=r.target.value,this.requestUpdate()}}"><p>${e.reports.length} reports / links · ${o.size} source bundles · ${i} triaged findings</p><label for="import-repo">Repository for files and source bundles without an active repository</label> <select id="import-repo" .value="${String(this._repo??"")}" ?disabled="${this._busy||!!e.team}" @change="${r=>{this._repo=r.target.value?Number(r.target.value):null}}"><option value="" ?selected="${this._repo==null}">Choose a repository…</option>${(this._catalog?.repos??[]).map(r=>g`<option value="${String(r.repoId)}" ?selected="${this._repo===r.repoId}">${r.fullName}</option>`)}</select><p>Declared report repositories and directories are preserved. Stored reports without an active repository use the selected repository. The new team receives those repository paths; other published reports in the same paths are also visible to that team.</p><ul>${e.reports.map(r=>g`<li>${r.name}<span>${r.links?"Global deduplication \u2014 enabled for all teams":r.github??"Uses selected repository"}${r.links||r.github==null||r.repoId!=null?"":r.embedded?" \u2014 connect this repository first":" \u2014 not connected; uses selected repository"}</span></li>`)}</ul>${c.length>0?g`<p>Existing source bundles in active repositories keep their locations. The new team also receives access to those directories. Unassigned bundles and bundles in inactive repositories use the selected repository.</p><ul>${c.map(r=>g`<li>${r.filename}<span>${r.repoFullName?`${r.repoFullName}${r.repoDirectory?`/${r.repoDirectory}`:""}`:"Uses selected repository"}</span></li>`)}</ul>`:w} ${s?g`<p>${s} referenced source bundles have no bytes in this export. Reports can use matching bundles already on the server.</p>`:w} ${i?g`<fieldset ?disabled="${this._busy||!!e.team}"><legend>Import triage?</legend><label><input type="radio" name="import-triage" value="include" ?checked="${this._triage==="include"}" @change="${()=>{this._triage="include"}}"> Include triage and comments</label> <label><input type="radio" name="import-triage" value="skip" ?checked="${this._triage==="skip"}" @change="${()=>{this._triage="skip"}}"> Skip triage</label><p>Conflicting values prompt for resolution. Triage stays shared by finding ID across teams. Per-report local ignores are not imported.</p></fieldset>`:w} <button type="button" class="btn primary" ?disabled="${this._busy||!this._triage||!this._csrf}" @click="${()=>this._import()}">${this._busy?"Importing\u2026":e.team?"Retry remaining import":"Import workspace"}</button></section>`:w} ${this._message?g`<p role="status">${this._message}</p>`:w} ${this._error?g`<p class="error" role="alert">${this._error}${this._catalog?w:g`<button class="btn" @click="${()=>this._loadCatalog()}">Retry</button>`}</p>`:w} ${this._files.length>0&&!this._busy?g`<button class="btn" @click="${()=>this._nextFile()}">Next workspace file (${this._files.length} waiting)</button>`:w}</div>`}}customElements.define("managed-admin-import",n)}export{be as registerWorkspaceImport};