@tantainnovative/ndpr-toolkit
Version:
Nigeria Data Protection Toolkit — enterprise-grade compliance components for the Nigeria Data Protection Act (NDPA) 2023
1 lines • 5.15 kB
JavaScript
;var chunk3YTAOT5O_js=require('./chunk-3YTAOT5O.js'),chunkVWED6UTN_js=require('./chunk-VWED6UTN.js'),chunkRFPLZDIO_js=require('./chunk-RFPLZDIO.js'),react=require('react');function G(c,d){switch(d.type){case "LOAD":return d.payload;case "ADD_REPORT":return chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},c),{reports:[...c.reports,d.payload]});case "UPDATE_REPORT":{let f=[...c.reports];return f[d.payload.index]=d.payload.report,chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},c),{reports:f})}case "SET_ASSESSMENT":{let{existing:f,id:S,assessment:g}=d.payload,A=f?c.assessments.map(R=>R.id===S?g:R):[...c.assessments,g];return chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},c),{assessments:A})}case "SET_NOTIFICATION":{let{existing:f,id:S,notification:g}=d.payload,A=f?c.notifications.map(R=>R.id===S?g:R):[...c.notifications,g];return chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},c),{notifications:A})}case "CLEAR":return {reports:[],assessments:[],notifications:[]}}}function J(c,d){return d?chunkVWED6UTN_js.a(c):{load:()=>null,save:()=>{},remove:()=>{}}}function X({categories:c,initialReports:d=[],adapter:f,storageKey:S="ndpr_breach_data",useLocalStorage:g=true,onReport:A,onAssessment:R,onNotification:I}){let k=f!=null?f:J(S,g),E=react.useRef(k);E.current=k;let[b,y]=react.useReducer(G,{reports:d,assessments:[],notifications:[]}),[C,T]=react.useState(true),l=react.useRef(b);l.current=b;let h=react.useCallback(t=>{Promise.resolve(E.current.save(t)).catch(s=>{console.warn("[ndpr-toolkit] Failed to save breach data:",s);});},[]);react.useEffect(()=>{let t=false;try{let s=E.current.load(),i=e=>{var r,n,a;e&&y({type:"LOAD",payload:{reports:(r=e.reports)!=null?r:[],assessments:(n=e.assessments)!=null?n:[],notifications:(a=e.notifications)!=null?a:[]}}),T(!1);};s instanceof Promise?s.then(e=>{t||i(e);},()=>{t||T(!1);}):i(s);}catch(s){t||T(false);}return ()=>{t=true;}},[]);let B=react.useCallback(t=>`${t}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,[]),_=react.useCallback(t=>{let s=chunkRFPLZDIO_js.a({id:B("breach"),reportedAt:Date.now()},t);y({type:"ADD_REPORT",payload:s});let i=l.current,e=chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},i),{reports:[...i.reports,s]});return h(e),A&&A(s),s},[B,A,h]),P=react.useCallback((t,s)=>{let i=l.current,e=i.reports.findIndex(a=>a.id===t);if(e===-1)return null;let r=chunkRFPLZDIO_js.a(chunkRFPLZDIO_js.a({},i.reports[e]),s);y({type:"UPDATE_REPORT",payload:{index:e,report:r}});let n=[...i.reports];return n[e]=r,h(chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},i),{reports:n})),r},[h]),w=react.useCallback(t=>l.current.reports.find(s=>s.id===t)||null,[]),L=react.useCallback((t,s)=>{let i=l.current,e=i.assessments.find(u=>u.breachId===t),r,n;e?(r=chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a(chunkRFPLZDIO_js.a({},e),s),{assessedAt:Date.now()}),n=true):(r=chunkRFPLZDIO_js.a({id:B("assessment"),breachId:t,assessedAt:Date.now()},s),n=false),y({type:"SET_ASSESSMENT",payload:{existing:n,id:e==null?void 0:e.id,assessment:r}});let a=n?i.assessments.map(u=>u.id===e.id?r:u):[...i.assessments,r];return h(chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},i),{assessments:a})),R&&R(r),r},[B,R,h]),U=react.useCallback(t=>l.current.assessments.find(s=>s.breachId===t)||null,[]),D=react.useCallback(t=>{let s=l.current.reports.find(N=>N.id===t)||null,i=l.current.assessments.find(N=>N.breachId===t)||null;if(!s)return null;let{severityLevel:e,notificationRequired:r,timeframeHours:n,justification:a}=chunk3YTAOT5O_js.a(s,i||void 0),u=s.discoveredAt+n*60*60*1e3;return {ndpcNotificationRequired:r,ndpcNotificationDeadline:u,dataSubjectNotificationRequired:e==="high"||e==="critical",justification:a}},[]),F=react.useCallback((t,s)=>{let i=l.current,e=i.notifications.find(u=>u.breachId===t),r,n;e?(r=chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a(chunkRFPLZDIO_js.a({},e),s),{sentAt:Date.now()}),n=true):(r=chunkRFPLZDIO_js.a({id:B("notification"),breachId:t,sentAt:Date.now()},s),n=false),y({type:"SET_NOTIFICATION",payload:{existing:n,id:e==null?void 0:e.id,notification:r}});let a=n?i.notifications.map(u=>u.id===e.id?r:u):[...i.notifications,r];return h(chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},i),{notifications:a})),I&&I(r),r},[B,I,h]),M=react.useCallback(t=>l.current.notifications.find(s=>s.breachId===t)||null,[]),$=react.useCallback((t=24)=>{let s=Date.now(),i=l.current,e=[];return i.reports.forEach(r=>{if(i.notifications.some(O=>O.breachId===r.id))return;let n=i.assessments.find(O=>O.breachId===r.id)||null;if(!n)return;let a=D(r.id);if(!a||!a.ndpcNotificationRequired)return;let N=(a.ndpcNotificationDeadline-s)/(3600*1e3);N<=t&&e.push({report:r,assessment:n,requirements:a,hoursRemaining:N});}),e.sort((r,n)=>r.hoursRemaining-n.hoursRemaining)},[D]),j=react.useCallback(()=>{y({type:"CLEAR"}),Promise.resolve(E.current.remove()).catch(t=>{console.warn("[ndpr-toolkit] Failed to remove breach data:",t);});},[]);return {reports:b.reports,assessments:b.assessments,notifications:b.notifications,reportBreach:_,updateReport:P,getReport:w,assessRisk:L,getAssessment:U,calculateNotificationRequirements:D,sendNotification:F,getNotification:M,getBreachesRequiringNotification:$,clearBreachData:j,isLoading:C}}exports.a=X;