UNPKG

@tantainnovative/ndpr-toolkit

Version:

Nigeria Data Protection Toolkit — enterprise-grade compliance components for the Nigeria Data Protection Act (NDPA) 2023

1 lines 4.44 kB
function f(e){if(e.length===0||e.length>254)return false;let t=e.indexOf("@");if(t<=0||t!==e.lastIndexOf("@"))return false;let s=e.slice(0,t),n=e.slice(t+1);return !(s.length===0||n.length===0||/\s/.test(e)||!n.includes(".")||n.startsWith(".")||n.endsWith("."))}function d(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function a(e){return typeof e=="string"&&e.trim().length>0}function l(e){if(!d(e)||!a(e.requestType)||!d(e.dataSubject))return false;let t=e.dataSubject;return !(!a(t.fullName)||!a(t.email)||typeof e.submittedAt!="number"||!Number.isFinite(e.submittedAt))}function c(e,t={}){var u,o;let{requireIdentityVerification:s=true,allowedRequestTypes:n}=t,i=[];if(!d(e))return {valid:false,errors:[{field:"_root",code:"payload_not_object",message:"Payload must be an object"}]};a(e.requestType)?n&&!n.includes(e.requestType)&&i.push({field:"requestType",code:"request_type_not_allowed",message:`Request type "${e.requestType}" is not in the allowed set`}):i.push({field:"requestType",code:"request_type_required",message:"Request type is required"});let r=e.dataSubject;return d(r)?(a(r.fullName)||i.push({field:"dataSubject.fullName",code:"full_name_required",message:"Full name is required"}),a(r.email)?f(r.email)||i.push({field:"dataSubject.email",code:"email_invalid_format",message:"Email address format is invalid"}):i.push({field:"dataSubject.email",code:"email_required",message:"Email address is required"}),r.phone!==void 0&&typeof r.phone!="string"&&i.push({field:"dataSubject.phone",code:"phone_invalid_type",message:"Phone must be a string when provided"}),s&&(a(r.identifierType)||i.push({field:"dataSubject.identifierType",code:"identifier_type_required",message:"Identifier type is required"}),a(r.identifierValue)||i.push({field:"dataSubject.identifierValue",code:"identifier_value_required",message:"Identifier value is required"}))):i.push({field:"dataSubject",code:"data_subject_required",message:"Data subject information is required"}),(typeof e.submittedAt!="number"||!Number.isFinite(e.submittedAt))&&i.push({field:"submittedAt",code:"submitted_at_invalid",message:"submittedAt must be a finite number (ms timestamp)"}),e.additionalInfo!==void 0&&!d(e.additionalInfo)&&i.push({field:"additionalInfo",code:"additional_info_invalid_type",message:"additionalInfo must be an object when provided"}),i.length>0?{valid:false,errors:i}:l(e)?{valid:true,errors:[],data:{requestType:e.requestType,dataSubject:{fullName:e.dataSubject.fullName,email:e.dataSubject.email,phone:e.dataSubject.phone,identifierType:(u=e.dataSubject.identifierType)!=null?u:"",identifierValue:(o=e.dataSubject.identifierValue)!=null?o:""},additionalInfo:e.additionalInfo,submittedAt:e.submittedAt}}:{valid:false,errors:[{field:"_root",code:"payload_final_narrowing_failed",message:"Payload failed final narrowing"}]}}function m(e){var n,i;let t=[];e.id||t.push({field:"id",code:"request_id_required",message:"Request ID is required"}),e.type||t.push({field:"type",code:"request_type_required",message:"Request type is required"}),e.status||t.push({field:"status",code:"request_status_required",message:"Request status is required"}),e.createdAt||t.push({field:"createdAt",code:"created_at_required",message:"Creation timestamp is required"}),(n=e.subject)!=null&&n.name||t.push({field:"subject.name",code:"subject_name_required",message:"Data subject name is required"}),(i=e.subject)!=null&&i.email||t.push({field:"subject.email",code:"subject_email_required",message:"Data subject email is required"});let s={requestId:e.id,requestType:e.type,status:e.status,createdDate:new Date(e.createdAt).toISOString(),lastUpdated:e.updatedAt?new Date(e.updatedAt).toISOString():void 0,dueDate:e.dueDate?new Date(e.dueDate).toISOString():void 0,dataSubject:e.subject?{name:e.subject.name,email:e.subject.email,phone:e.subject.phone||"Not provided",identifier:{type:e.subject.identifierType||"Not specified",value:e.subject.identifierValue||"Not provided"}}:void 0,additionalInformation:e.additionalInfo||{},verificationStatus:e.verification?`${e.verification.verified?"Verified":"Not verified"}${e.verification.method?` via ${e.verification.method}`:""}`:"Pending verification",attachments:e.attachments?e.attachments.map(r=>({name:r.name,type:r.type,addedOn:new Date(r.addedAt).toISOString()})):[]};return t.length>0?{valid:false,errors:t,formattedRequest:s}:{valid:true,errors:[],formattedRequest:s,data:e}}export{c as a,m as b};