@tantainnovative/ndpr-toolkit 3.5.1 → 3.6.0

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.
Files changed (199) hide show
  1. package/CHANGELOG.md +125 -0
  2. package/README.md +29 -8
  3. package/dist/adapters.d.mts +137 -3
  4. package/dist/adapters.d.ts +137 -3
  5. package/dist/adapters.js +1 -2
  6. package/dist/adapters.mjs +1 -2
  7. package/dist/breach.d.mts +80 -1
  8. package/dist/breach.d.ts +80 -1
  9. package/dist/breach.js +1 -2
  10. package/dist/breach.mjs +1 -2
  11. package/dist/{chunk-PATONNTZ.mjs → chunk-3HOXQNCH.mjs} +1 -2
  12. package/dist/{chunk-MJGOLP5M.js → chunk-3IA3KDII.js} +1 -2
  13. package/dist/{chunk-M2TPT5GB.js → chunk-3JPDTXGC.js} +1 -2
  14. package/dist/{chunk-BKRETVJ6.js → chunk-3YTAOT5O.js} +1 -2
  15. package/dist/{chunk-GOU6FU6Y.js → chunk-4CVBQC66.js} +1 -2
  16. package/dist/{chunk-E4NCJ7RD.mjs → chunk-4G3SRVRI.mjs} +1 -2
  17. package/dist/{chunk-6QPRDQZF.js → chunk-4QXTB3L6.js} +1 -2
  18. package/dist/{chunk-XNSZ7KUH.js → chunk-5GVMKUMP.js} +1 -2
  19. package/dist/chunk-66NQ5CVY.mjs +1 -0
  20. package/dist/chunk-732C2EVN.js +1 -0
  21. package/dist/chunk-7BJXI2HI.mjs +1 -0
  22. package/dist/{chunk-C5QO3SX4.js → chunk-7IFSWCQP.js} +1 -2
  23. package/dist/{chunk-A4PK7JB2.js → chunk-7ZZO7GVB.js} +1 -2
  24. package/dist/chunk-AME4HJR4.js +1 -0
  25. package/dist/chunk-AOHKVFAS.mjs +322 -0
  26. package/dist/{chunk-HO5M7M4M.js → chunk-B46SJB5V.js} +1 -2
  27. package/dist/chunk-BFAX7JQA.mjs +1 -0
  28. package/dist/{chunk-ID2NYIVE.mjs → chunk-BNHQFZHL.mjs} +2 -3
  29. package/dist/{chunk-RLYTX3MM.js → chunk-BRS52EDT.js} +1 -2
  30. package/dist/{chunk-OPYQIJKY.js → chunk-C7IDR2IV.js} +1 -2
  31. package/dist/{chunk-CISJAQ6W.mjs → chunk-COD3RMTL.mjs} +1 -2
  32. package/dist/chunk-CR2QZTGW.js +1 -0
  33. package/dist/{chunk-6WIP33TW.mjs → chunk-DBZSN4WP.mjs} +1 -2
  34. package/dist/{chunk-74Z23WUA.mjs → chunk-EEQALYOY.mjs} +1 -2
  35. package/dist/chunk-EFIBHKQE.mjs +1 -0
  36. package/dist/{chunk-GKKAK6ES.mjs → chunk-EWVK45Z3.mjs} +1 -2
  37. package/dist/{chunk-QSVVAZVT.mjs → chunk-EXEXUAF6.mjs} +1 -2
  38. package/dist/chunk-EZCGTHQV.js +6 -0
  39. package/dist/{chunk-SYMQJO2W.mjs → chunk-GTYXVAJX.mjs} +2 -3
  40. package/dist/{chunk-6FGCGLH5.mjs → chunk-H3XJV2IR.mjs} +1 -2
  41. package/dist/chunk-HBLGN4SD.js +1 -0
  42. package/dist/{chunk-MCWV7S2G.js → chunk-HHK5LHEG.js} +1 -2
  43. package/dist/{chunk-XHROISIF.mjs → chunk-HWHBINVN.mjs} +1 -2
  44. package/dist/{chunk-3EGQWLJ6.js → chunk-I2LMQWK3.js} +2 -3
  45. package/dist/{chunk-NQNFS3QI.js → chunk-I3Y4LOSL.js} +4 -5
  46. package/dist/chunk-ITCY2Z66.mjs +4 -0
  47. package/dist/{chunk-Z6IIMLZU.mjs → chunk-KDAZQO3N.mjs} +1 -2
  48. package/dist/{chunk-J5WCPZLW.js → chunk-L2BRFMVS.js} +1 -2
  49. package/dist/chunk-L2VO3MEJ.js +1 -0
  50. package/dist/{chunk-R5FW5XUQ.mjs → chunk-LQTARVPU.mjs} +1 -2
  51. package/dist/{chunk-6TA2MVTU.mjs → chunk-LRRENTT5.mjs} +1 -2
  52. package/dist/chunk-LTPSN2SU.mjs +1 -0
  53. package/dist/{chunk-LIM64IV2.js → chunk-LVGT3DLT.js} +2 -3
  54. package/dist/{chunk-TXBZPCGF.mjs → chunk-LWIKDDSU.mjs} +1 -2
  55. package/dist/chunk-MPBPAEZC.mjs +1 -0
  56. package/dist/{chunk-Z73T6MWY.js → chunk-N3MQQUQP.js} +39 -35
  57. package/dist/{chunk-HGGLW5TE.js → chunk-NUWVPRNI.js} +1 -2
  58. package/dist/chunk-O45PKBZA.mjs +6 -0
  59. package/dist/chunk-O6CUBNXK.mjs +3 -0
  60. package/dist/{chunk-7SMLHZ4B.js → chunk-P4LNLCSF.js} +1 -2
  61. package/dist/{chunk-VWPGIES4.mjs → chunk-PCU6GKBE.mjs} +1 -2
  62. package/dist/chunk-PGI2LM6P.js +103 -0
  63. package/dist/{chunk-U62QYKVG.mjs → chunk-PJNKQPQP.mjs} +1 -2
  64. package/dist/chunk-PL4XNCQA.mjs +1 -0
  65. package/dist/{chunk-LSNL4XR5.js → chunk-PZRQWPWD.js} +1 -2
  66. package/dist/chunk-Q64735OC.js +144 -0
  67. package/dist/chunk-QPRYXVH2.js +1 -0
  68. package/dist/{chunk-MQFZHA2D.js → chunk-RFPLZDIO.js} +1 -2
  69. package/dist/chunk-RMQ7OLNY.mjs +144 -0
  70. package/dist/chunk-ROTLSZMV.js +1 -0
  71. package/dist/{chunk-2AW7KAZO.mjs → chunk-RPXRPGHL.mjs} +1 -2
  72. package/dist/chunk-RV2VMWZJ.mjs +1 -0
  73. package/dist/chunk-RXZFYBUJ.js +1 -0
  74. package/dist/chunk-RYREGZVQ.js +1 -0
  75. package/dist/{chunk-B4Z5MBUC.mjs → chunk-RZ6GC6WN.mjs} +1 -2
  76. package/dist/chunk-S6COXIZA.js +2 -0
  77. package/dist/chunk-SFGW37LE.mjs +1 -0
  78. package/dist/{chunk-3NQQSU4P.js → chunk-SJDDNB6M.js} +1 -2
  79. package/dist/chunk-SJRIOZ4K.mjs +1 -0
  80. package/dist/{chunk-H3EYBSVP.mjs → chunk-TMXK4QKK.mjs} +2 -3
  81. package/dist/{chunk-P42Z5CFE.js → chunk-TQZWJGJ2.js} +1 -2
  82. package/dist/{chunk-EPT2K355.mjs → chunk-U5RWJRGA.mjs} +1 -2
  83. package/dist/{chunk-R3OYAJI6.mjs → chunk-UASG46LP.mjs} +1 -2
  84. package/dist/{chunk-RXL6CZAI.js → chunk-UAV7V4EM.js} +1 -2
  85. package/dist/chunk-UI536RU2.js +3 -0
  86. package/dist/{chunk-7AVN424U.js → chunk-UTFBKL73.js} +1 -2
  87. package/dist/{chunk-I54CDQGN.js → chunk-UXUMYP4L.js} +1 -2
  88. package/dist/chunk-V3RYHNHN.js +1 -0
  89. package/dist/{chunk-P3PULLYP.mjs → chunk-V7UFP6QU.mjs} +1 -2
  90. package/dist/{chunk-I4M2AA3N.js → chunk-VJTQXVAF.js} +1 -2
  91. package/dist/{chunk-ELKB2AFZ.js → chunk-VWED6UTN.js} +1 -2
  92. package/dist/{chunk-LU7PKE7Y.mjs → chunk-VYAL2TGT.mjs} +1 -2
  93. package/dist/chunk-W47OSMT6.js +2 -0
  94. package/dist/chunk-W65ZWTLD.mjs +1 -0
  95. package/dist/chunk-W7RBGZCC.js +1 -0
  96. package/dist/{chunk-5HL4UBFV.js → chunk-WDDCKYWA.js} +1 -2
  97. package/dist/{chunk-DJGS7SSN.mjs → chunk-WTGKZX7J.mjs} +1 -2
  98. package/dist/{chunk-TDDAYVKK.js → chunk-WZYCBW2R.js} +1 -2
  99. package/dist/chunk-X3GCGC3H.mjs +103 -0
  100. package/dist/chunk-XJO4DH3L.mjs +2 -0
  101. package/dist/{chunk-LWXZMKC2.js → chunk-XO3VQYTL.js} +7 -8
  102. package/dist/{chunk-IZCWCE7W.mjs → chunk-XOH4WXOZ.mjs} +1 -2
  103. package/dist/{chunk-SHMJNRHO.mjs → chunk-XP5PL6K7.mjs} +1 -2
  104. package/dist/{chunk-CKGJK4D7.mjs → chunk-Y3MKMAFQ.mjs} +2 -3
  105. package/dist/chunk-YFBDJ4FH.js +1 -0
  106. package/dist/chunk-YTU4FNM2.mjs +1 -0
  107. package/dist/{chunk-TV4U6AIS.js → chunk-Z763UI5U.js} +1 -2
  108. package/dist/chunk-ZHFLBL63.mjs +2 -0
  109. package/dist/{chunk-RRVKUCFR.mjs → chunk-ZIZL37BG.mjs} +1 -2
  110. package/dist/{chunk-WWT2ZSNU.mjs → chunk-ZJYULEER.mjs} +1 -2
  111. package/dist/{chunk-LJNNPAFU.mjs → chunk-ZQZJNKVB.mjs} +1 -2
  112. package/dist/chunk-ZVOIR4QH.js +4 -0
  113. package/dist/consent.js +1 -2
  114. package/dist/consent.mjs +1 -2
  115. package/dist/core.d.mts +98 -19
  116. package/dist/core.d.ts +98 -19
  117. package/dist/core.js +1 -2
  118. package/dist/core.mjs +1 -2
  119. package/dist/cross-border.d.mts +36 -14
  120. package/dist/cross-border.d.ts +36 -14
  121. package/dist/cross-border.js +1 -2
  122. package/dist/cross-border.mjs +1 -2
  123. package/dist/dpia.d.mts +4 -4
  124. package/dist/dpia.d.ts +4 -4
  125. package/dist/dpia.js +1 -2
  126. package/dist/dpia.mjs +1 -2
  127. package/dist/dsr.d.mts +30 -17
  128. package/dist/dsr.d.ts +30 -17
  129. package/dist/dsr.js +1 -2
  130. package/dist/dsr.mjs +1 -2
  131. package/dist/hooks.d.mts +113 -20
  132. package/dist/hooks.d.ts +113 -20
  133. package/dist/hooks.js +1 -2
  134. package/dist/hooks.mjs +1 -2
  135. package/dist/index.d.mts +422 -26
  136. package/dist/index.d.ts +422 -26
  137. package/dist/index.js +1 -2
  138. package/dist/index.mjs +1 -2
  139. package/dist/lawful-basis.js +1 -2
  140. package/dist/lawful-basis.mjs +1 -2
  141. package/dist/policy.js +1 -2
  142. package/dist/policy.mjs +1 -2
  143. package/dist/presets-consent.d.mts +139 -0
  144. package/dist/presets-consent.d.ts +139 -0
  145. package/dist/presets-consent.js +2 -0
  146. package/dist/presets-consent.mjs +2 -0
  147. package/dist/presets-dsr.d.mts +133 -0
  148. package/dist/presets-dsr.d.ts +133 -0
  149. package/dist/presets-dsr.js +2 -0
  150. package/dist/presets-dsr.mjs +2 -0
  151. package/dist/presets-policy.d.mts +203 -0
  152. package/dist/presets-policy.d.ts +203 -0
  153. package/dist/presets-policy.js +2 -0
  154. package/dist/presets-policy.mjs +2 -0
  155. package/dist/presets.d.mts +127 -5
  156. package/dist/presets.d.ts +127 -5
  157. package/dist/presets.js +1 -2
  158. package/dist/presets.mjs +1 -2
  159. package/dist/ropa.js +1 -2
  160. package/dist/ropa.mjs +1 -2
  161. package/dist/server.d.mts +226 -22
  162. package/dist/server.d.ts +226 -22
  163. package/dist/server.js +1 -2
  164. package/dist/server.mjs +1 -2
  165. package/dist/styles.css +34 -0
  166. package/dist/unstyled.d.mts +3 -1
  167. package/dist/unstyled.d.ts +3 -1
  168. package/dist/unstyled.js +1 -2
  169. package/dist/unstyled.mjs +1 -2
  170. package/package.json +83 -20
  171. package/dist/chunk-3VQAYQR7.js +0 -7
  172. package/dist/chunk-6HZL2WDU.mjs +0 -2
  173. package/dist/chunk-75TJPK2N.mjs +0 -2
  174. package/dist/chunk-ABDB7LEV.mjs +0 -2
  175. package/dist/chunk-AYKLAEOU.mjs +0 -2
  176. package/dist/chunk-C4YM4UMI.js +0 -2
  177. package/dist/chunk-CKJAECGV.js +0 -2
  178. package/dist/chunk-CPK5D5FY.js +0 -132
  179. package/dist/chunk-CWHBCQGT.mjs +0 -2
  180. package/dist/chunk-E64TU6IU.js +0 -2
  181. package/dist/chunk-F5TXUA4O.mjs +0 -4
  182. package/dist/chunk-GN5C32JB.mjs +0 -2
  183. package/dist/chunk-GRLIPT5V.mjs +0 -132
  184. package/dist/chunk-I557S566.mjs +0 -15
  185. package/dist/chunk-JBSCER34.js +0 -2
  186. package/dist/chunk-JFFOPHU3.mjs +0 -318
  187. package/dist/chunk-KF3EFJEF.mjs +0 -3
  188. package/dist/chunk-ORFC66EA.js +0 -4
  189. package/dist/chunk-RY3PGVLZ.mjs +0 -2
  190. package/dist/chunk-S4GRSNB4.js +0 -2
  191. package/dist/chunk-SCWNM4PC.mjs +0 -2
  192. package/dist/chunk-SKKOMFXH.js +0 -81
  193. package/dist/chunk-TCN22KYP.mjs +0 -7
  194. package/dist/chunk-TUNQUVHU.mjs +0 -81
  195. package/dist/chunk-VIQUXWJC.js +0 -2
  196. package/dist/chunk-WTJGLNTB.js +0 -3
  197. package/dist/chunk-XIM7KMD6.js +0 -2
  198. package/dist/chunk-YPKUHSK4.js +0 -15
  199. package/dist/chunk-ZPKVLTSX.js +0 -2
package/dist/core.mjs CHANGED
@@ -1,2 +1 @@
1
- export{a as NDPRProvider,b as useNDPRConfig,c as useNDPRLocale}from'./chunk-74Z23WUA.mjs';export{c as hausaLocale,b as igboLocale,d as pidginLocale,a as yorubaLocale}from'./chunk-R5FW5XUQ.mjs';export{a as defaultLocale,b as mergeLocale}from'./chunk-XHROISIF.mjs';export{b as createDefaultContext,c as evaluatePolicyCompliance}from'./chunk-I557S566.mjs';export{c as DEFAULT_POLICY_SECTIONS,d as DEFAULT_POLICY_VARIABLES,e as createBusinessPolicyTemplate,a as findUnfilledTokens,b as generatePolicyText}from'./chunk-CKGJK4D7.mjs';export{a as getComplianceScore}from'./chunk-ABDB7LEV.mjs';export{c as assemblePolicy}from'./chunk-GRLIPT5V.mjs';export{c as assessComplianceGaps,d as generateLawfulBasisSummary,b as getLawfulBasisDescription,a as validateProcessingActivity}from'./chunk-TXBZPCGF.mjs';export{h as assessTransferRisk,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,g as validateTransfer}from'./chunk-75TJPK2N.mjs';export{c as exportROPAToCSV,b as generateROPASummary,d as identifyComplianceGaps,a as validateProcessingRecord}from'./chunk-SHMJNRHO.mjs';export{c as appendAuditEntry,a as createAuditEntry,b as getAuditLog}from'./chunk-P3PULLYP.mjs';export{a as validateConsent,b as validateConsentOptions}from'./chunk-U62QYKVG.mjs';export{b as formatDSRRequest,a as validateDsrSubmission}from'./chunk-B4Z5MBUC.mjs';export{a as assessDPIARisk}from'./chunk-6TA2MVTU.mjs';export{a as calculateBreachSeverity}from'./chunk-DJGS7SSN.mjs';export{a as sanitizeInput}from'./chunk-GKKAK6ES.mjs';import'./chunk-WWT2ZSNU.mjs';//# sourceMappingURL=core.mjs.map
2
- //# sourceMappingURL=core.mjs.map
1
+ export{a as NDPRProvider,b as useNDPRConfig,c as useNDPRLocale}from'./chunk-EEQALYOY.mjs';export{c as hausaLocale,b as igboLocale,d as pidginLocale,a as yorubaLocale}from'./chunk-LQTARVPU.mjs';export{a as defaultLocale,b as mergeLocale}from'./chunk-HWHBINVN.mjs';export{c as DEFAULT_POLICY_SECTIONS,d as DEFAULT_POLICY_VARIABLES,e as createBusinessPolicyTemplate,a as findUnfilledTokens,b as generatePolicyText}from'./chunk-Y3MKMAFQ.mjs';export{a as getComplianceScore}from'./chunk-EFIBHKQE.mjs';export{c as assemblePolicy,e as createDefaultContext,f as evaluatePolicyCompliance}from'./chunk-RMQ7OLNY.mjs';export{c as assessComplianceGaps,d as generateLawfulBasisSummary,b as getLawfulBasisDescription,a as validateProcessingActivity}from'./chunk-LWIKDDSU.mjs';export{h as assessTransferRisk,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,g as validateTransfer}from'./chunk-7BJXI2HI.mjs';export{c as exportROPAToCSV,b as generateROPASummary,d as identifyComplianceGaps,a as validateProcessingRecord}from'./chunk-XP5PL6K7.mjs';export{c as appendAuditEntry,a as createAuditEntry,b as getAuditLog}from'./chunk-V7UFP6QU.mjs';export{a as validateConsent,b as validateConsentOptions}from'./chunk-PJNKQPQP.mjs';export{b as formatDSRRequest,a as validateDsrSubmission}from'./chunk-RZ6GC6WN.mjs';export{a as assessDPIARisk}from'./chunk-LRRENTT5.mjs';export{a as calculateBreachSeverity}from'./chunk-WTGKZX7J.mjs';export{a as sanitizeInput}from'./chunk-EWVK45Z3.mjs';export{b as LEGAL_DISCLAIMER_LONG,a as LEGAL_DISCLAIMER_SHORT,c as legalDisclaimerBlock}from'./chunk-ITCY2Z66.mjs';import'./chunk-ZJYULEER.mjs';
@@ -19,9 +19,13 @@ export declare function assessTransferRisk(transfer: CrossBorderTransfer): Trans
19
19
  * Database of country adequacy determinations for cross-border data transfers.
20
20
  *
21
21
  * This map is keyed by ISO 3166-1 alpha-2 country code (uppercase).
22
- * Statuses reflect general assessments based on each country's data protection
23
- * framework and are provided for guidance purposes. Organizations should verify
24
- * current NDPC guidance before relying on these determinations.
22
+ *
23
+ * IMPORTANT Statuses with `recognizedBy: 'self-assessment'` are this toolkit's
24
+ * guidance assessments based on each country's data-protection framework. They
25
+ * are NOT NDPC-issued adequacy decisions. NDPC has not (as of publication)
26
+ * published any formal Section 42 adequacy list. Organisations transferring
27
+ * personal data outside Nigeria should perform their own transfer impact
28
+ * assessment and consult counsel before relying on any entry here.
25
29
  */
26
30
  export declare const COUNTRY_ADEQUACY_MAP: Record<string, CountryAdequacy>;
27
31
 
@@ -35,8 +39,16 @@ export declare interface CountryAdequacy {
35
39
  isoCode: string;
36
40
  /** Adequacy status for data protection purposes */
37
41
  adequacyStatus: CountryAdequacyStatus;
38
- /** Authority or framework that recognized the adequacy (e.g. 'NDPC', 'EU') */
39
- recognizedBy: string;
42
+ /**
43
+ * Source of the adequacy determination.
44
+ * - 'NDPC' — formally listed by the Nigeria Data Protection Commission under
45
+ * NDPA Section 42 (no such list has been published at time of writing).
46
+ * - 'EU' — recognized as adequate by EU member-state membership / GDPR.
47
+ * - 'UK' — recognized by the UK ICO.
48
+ * - 'self-assessment' — toolkit maintainers' guidance assessment. Verify
49
+ * independently and confirm with your DPO/counsel before relying on it.
50
+ */
51
+ recognizedBy: 'NDPC' | 'EU' | 'UK' | 'self-assessment';
40
52
  /** Additional notes about the adequacy determination */
41
53
  notes: string;
42
54
  /** Date the adequacy determination was last reviewed */
@@ -47,10 +59,15 @@ export declare interface CountryAdequacy {
47
59
  * Country adequacy determinations for cross-border data transfers
48
60
  * under the Nigeria Data Protection Act (NDPA).
49
61
  *
50
- * This module provides a reference database of adequacy statuses for countries
51
- * that Nigerian businesses commonly transfer personal data to, along with
52
- * helper functions for querying adequacy and determining whether NDPC approval
53
- * is required for a given destination.
62
+ * IMPORTANT Not legal advice and not an NDPC adequacy list.
63
+ *
64
+ * As of publication, the Nigeria Data Protection Commission has not published
65
+ * a formal list of countries it deems adequate under NDPA Section 42. The
66
+ * Commission is empowered to issue such guidelines under Section 42(3), but
67
+ * has not yet done so. The entries in this map are *self-assessments* by the
68
+ * toolkit maintainers based on each country's data-protection framework, and
69
+ * are intended for guidance only. Verify the current NDPC position and consult
70
+ * counsel before relying on any entry here for a transfer impact assessment.
54
71
  */
55
72
  /**
56
73
  * Adequacy status of a country for cross-border data transfers.
@@ -281,11 +298,13 @@ export declare function getTransferMechanismDescription(mechanism: TransferMecha
281
298
 
282
299
  /**
283
300
  * Returns whether NDPC approval is required for a given transfer mechanism.
284
- * Approval is required for standard contractual clauses (Section 42),
285
- * binding corporate rules (Section 43), and specific NDPC authorization (Section 44).
301
+ * Under NDPA Section 42(5), the Commission may approve binding corporate rules,
302
+ * codes of conduct, certification mechanisms, or similar instruments. Standard
303
+ * contractual clauses are one of the appropriate safeguards under Section 41(1)(a)
304
+ * and the Commission may approve them per Section 42(4).
286
305
  *
287
306
  * @param mechanism The transfer mechanism
288
- * @returns Whether NDPC approval is required
307
+ * @returns Whether NDPC approval is typically required
289
308
  */
290
309
  export declare function isNDPCApprovalRequired(mechanism: TransferMechanism): boolean;
291
310
 
@@ -353,8 +372,11 @@ export declare interface TransferImpactAssessment {
353
372
  }
354
373
 
355
374
  /**
356
- * Cross-Border Data Transfer types aligned with NDPA 2023 Part VI (Sections 41-45)
357
- * Personal data may only be transferred outside Nigeria under specific conditions
375
+ * Cross-Border Data Transfer types aligned with NDPA 2023 Part VIII (Sections 41-43).
376
+ * Personal data may only be transferred outside Nigeria under the bases listed in
377
+ * Section 41(1), where Section 42 defines adequacy and Section 43 lists derogations.
378
+ *
379
+ * Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
358
380
  */
359
381
  /**
360
382
  * Transfer mechanisms recognized under the NDPA
@@ -19,9 +19,13 @@ export declare function assessTransferRisk(transfer: CrossBorderTransfer): Trans
19
19
  * Database of country adequacy determinations for cross-border data transfers.
20
20
  *
21
21
  * This map is keyed by ISO 3166-1 alpha-2 country code (uppercase).
22
- * Statuses reflect general assessments based on each country's data protection
23
- * framework and are provided for guidance purposes. Organizations should verify
24
- * current NDPC guidance before relying on these determinations.
22
+ *
23
+ * IMPORTANT Statuses with `recognizedBy: 'self-assessment'` are this toolkit's
24
+ * guidance assessments based on each country's data-protection framework. They
25
+ * are NOT NDPC-issued adequacy decisions. NDPC has not (as of publication)
26
+ * published any formal Section 42 adequacy list. Organisations transferring
27
+ * personal data outside Nigeria should perform their own transfer impact
28
+ * assessment and consult counsel before relying on any entry here.
25
29
  */
26
30
  export declare const COUNTRY_ADEQUACY_MAP: Record<string, CountryAdequacy>;
27
31
 
@@ -35,8 +39,16 @@ export declare interface CountryAdequacy {
35
39
  isoCode: string;
36
40
  /** Adequacy status for data protection purposes */
37
41
  adequacyStatus: CountryAdequacyStatus;
38
- /** Authority or framework that recognized the adequacy (e.g. 'NDPC', 'EU') */
39
- recognizedBy: string;
42
+ /**
43
+ * Source of the adequacy determination.
44
+ * - 'NDPC' — formally listed by the Nigeria Data Protection Commission under
45
+ * NDPA Section 42 (no such list has been published at time of writing).
46
+ * - 'EU' — recognized as adequate by EU member-state membership / GDPR.
47
+ * - 'UK' — recognized by the UK ICO.
48
+ * - 'self-assessment' — toolkit maintainers' guidance assessment. Verify
49
+ * independently and confirm with your DPO/counsel before relying on it.
50
+ */
51
+ recognizedBy: 'NDPC' | 'EU' | 'UK' | 'self-assessment';
40
52
  /** Additional notes about the adequacy determination */
41
53
  notes: string;
42
54
  /** Date the adequacy determination was last reviewed */
@@ -47,10 +59,15 @@ export declare interface CountryAdequacy {
47
59
  * Country adequacy determinations for cross-border data transfers
48
60
  * under the Nigeria Data Protection Act (NDPA).
49
61
  *
50
- * This module provides a reference database of adequacy statuses for countries
51
- * that Nigerian businesses commonly transfer personal data to, along with
52
- * helper functions for querying adequacy and determining whether NDPC approval
53
- * is required for a given destination.
62
+ * IMPORTANT Not legal advice and not an NDPC adequacy list.
63
+ *
64
+ * As of publication, the Nigeria Data Protection Commission has not published
65
+ * a formal list of countries it deems adequate under NDPA Section 42. The
66
+ * Commission is empowered to issue such guidelines under Section 42(3), but
67
+ * has not yet done so. The entries in this map are *self-assessments* by the
68
+ * toolkit maintainers based on each country's data-protection framework, and
69
+ * are intended for guidance only. Verify the current NDPC position and consult
70
+ * counsel before relying on any entry here for a transfer impact assessment.
54
71
  */
55
72
  /**
56
73
  * Adequacy status of a country for cross-border data transfers.
@@ -281,11 +298,13 @@ export declare function getTransferMechanismDescription(mechanism: TransferMecha
281
298
 
282
299
  /**
283
300
  * Returns whether NDPC approval is required for a given transfer mechanism.
284
- * Approval is required for standard contractual clauses (Section 42),
285
- * binding corporate rules (Section 43), and specific NDPC authorization (Section 44).
301
+ * Under NDPA Section 42(5), the Commission may approve binding corporate rules,
302
+ * codes of conduct, certification mechanisms, or similar instruments. Standard
303
+ * contractual clauses are one of the appropriate safeguards under Section 41(1)(a)
304
+ * and the Commission may approve them per Section 42(4).
286
305
  *
287
306
  * @param mechanism The transfer mechanism
288
- * @returns Whether NDPC approval is required
307
+ * @returns Whether NDPC approval is typically required
289
308
  */
290
309
  export declare function isNDPCApprovalRequired(mechanism: TransferMechanism): boolean;
291
310
 
@@ -353,8 +372,11 @@ export declare interface TransferImpactAssessment {
353
372
  }
354
373
 
355
374
  /**
356
- * Cross-Border Data Transfer types aligned with NDPA 2023 Part VI (Sections 41-45)
357
- * Personal data may only be transferred outside Nigeria under specific conditions
375
+ * Cross-Border Data Transfer types aligned with NDPA 2023 Part VIII (Sections 41-43).
376
+ * Personal data may only be transferred outside Nigeria under the bases listed in
377
+ * Section 41(1), where Section 42 defines adequacy and Section 43 lists derogations.
378
+ *
379
+ * Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
358
380
  */
359
381
  /**
360
382
  * Transfer mechanisms recognized under the NDPA
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- 'use strict';var chunkNQNFS3QI_js=require('./chunk-NQNFS3QI.js'),chunkMCWV7S2G_js=require('./chunk-MCWV7S2G.js'),chunkC4YM4UMI_js=require('./chunk-C4YM4UMI.js');require('./chunk-E64TU6IU.js'),require('./chunk-ELKB2AFZ.js'),require('./chunk-MQFZHA2D.js');var react=require('react'),jsxRuntime=require('react/jsx-runtime');var t=react.createContext(null);function A(){let r=react.useContext(t);if(!r)throw new Error("CrossBorder compound components must be wrapped in <CrossBorder.Provider>. Example: <CrossBorder.Provider><CrossBorder.Manager /></CrossBorder.Provider>");return r}var e=({adapter:r,storageKey:d,useLocalStorage:a,initialTransfers:n,onAdd:p,onUpdate:C,onRemove:f,children:i})=>{let m=chunkMCWV7S2G_js.a({adapter:r,storageKey:d,useLocalStorage:a,initialTransfers:n,onAdd:p,onUpdate:C,onRemove:f});return jsxRuntime.jsx(t.Provider,{value:m,children:i})};var q={Provider:e,Manager:chunkNQNFS3QI_js.a};Object.defineProperty(exports,"CrossBorderTransferManager",{enumerable:true,get:function(){return chunkNQNFS3QI_js.a}});Object.defineProperty(exports,"useCrossBorderTransfer",{enumerable:true,get:function(){return chunkMCWV7S2G_js.a}});Object.defineProperty(exports,"COUNTRY_ADEQUACY_MAP",{enumerable:true,get:function(){return chunkC4YM4UMI_js.a}});Object.defineProperty(exports,"assessTransferRisk",{enumerable:true,get:function(){return chunkC4YM4UMI_js.h}});Object.defineProperty(exports,"getAdequateCountries",{enumerable:true,get:function(){return chunkC4YM4UMI_js.c}});Object.defineProperty(exports,"getCountryAdequacy",{enumerable:true,get:function(){return chunkC4YM4UMI_js.b}});Object.defineProperty(exports,"getTransferMechanismDescription",{enumerable:true,get:function(){return chunkC4YM4UMI_js.f}});Object.defineProperty(exports,"isNDPCApprovalRequired",{enumerable:true,get:function(){return chunkC4YM4UMI_js.e}});Object.defineProperty(exports,"requiresNDPCApproval",{enumerable:true,get:function(){return chunkC4YM4UMI_js.d}});Object.defineProperty(exports,"validateTransfer",{enumerable:true,get:function(){return chunkC4YM4UMI_js.g}});exports.CrossBorder=q;exports.CrossBorderProvider=e;exports.useCrossBorderCompound=A;//# sourceMappingURL=cross-border.js.map
3
- //# sourceMappingURL=cross-border.js.map
2
+ 'use strict';var chunkI3Y4LOSL_js=require('./chunk-I3Y4LOSL.js'),chunkHHK5LHEG_js=require('./chunk-HHK5LHEG.js'),chunkYFBDJ4FH_js=require('./chunk-YFBDJ4FH.js');require('./chunk-AME4HJR4.js'),require('./chunk-VWED6UTN.js'),require('./chunk-RFPLZDIO.js');var react=require('react'),jsxRuntime=require('react/jsx-runtime');var s=react.createContext(null);function A(){let r=react.useContext(s);if(!r)throw new Error("CrossBorder compound components must be wrapped in <CrossBorder.Provider>. Example: <CrossBorder.Provider><CrossBorder.Manager /></CrossBorder.Provider>");return r}var t=({adapter:r,storageKey:d,useLocalStorage:a,initialTransfers:n,onAdd:p,onUpdate:C,onRemove:f,children:i})=>{let m=chunkHHK5LHEG_js.a({adapter:r,storageKey:d,useLocalStorage:a,initialTransfers:n,onAdd:p,onUpdate:C,onRemove:f});return jsxRuntime.jsx(s.Provider,{value:m,children:i})};var q={Provider:t,Manager:chunkI3Y4LOSL_js.a};Object.defineProperty(exports,"CrossBorderTransferManager",{enumerable:true,get:function(){return chunkI3Y4LOSL_js.a}});Object.defineProperty(exports,"useCrossBorderTransfer",{enumerable:true,get:function(){return chunkHHK5LHEG_js.a}});Object.defineProperty(exports,"COUNTRY_ADEQUACY_MAP",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.a}});Object.defineProperty(exports,"assessTransferRisk",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.h}});Object.defineProperty(exports,"getAdequateCountries",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.c}});Object.defineProperty(exports,"getCountryAdequacy",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.b}});Object.defineProperty(exports,"getTransferMechanismDescription",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.f}});Object.defineProperty(exports,"isNDPCApprovalRequired",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.e}});Object.defineProperty(exports,"requiresNDPCApproval",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.d}});Object.defineProperty(exports,"validateTransfer",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.g}});exports.CrossBorder=q;exports.CrossBorderProvider=t;exports.useCrossBorderCompound=A;
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- import {a}from'./chunk-SYMQJO2W.mjs';export{a as CrossBorderTransferManager}from'./chunk-SYMQJO2W.mjs';import {a as a$1}from'./chunk-Z6IIMLZU.mjs';export{a as useCrossBorderTransfer}from'./chunk-Z6IIMLZU.mjs';export{a as COUNTRY_ADEQUACY_MAP,h as assessTransferRisk,c as getAdequateCountries,b as getCountryAdequacy,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,d as requiresNDPCApproval,g as validateTransfer}from'./chunk-75TJPK2N.mjs';import'./chunk-AYKLAEOU.mjs';import'./chunk-6WIP33TW.mjs';import'./chunk-WWT2ZSNU.mjs';import {createContext,useContext}from'react';import {jsx}from'react/jsx-runtime';var t=createContext(null);function A(){let r=useContext(t);if(!r)throw new Error("CrossBorder compound components must be wrapped in <CrossBorder.Provider>. Example: <CrossBorder.Provider><CrossBorder.Manager /></CrossBorder.Provider>");return r}var e=({adapter:r,storageKey:d,useLocalStorage:a,initialTransfers:n,onAdd:p,onUpdate:C,onRemove:f,children:i})=>{let m=a$1({adapter:r,storageKey:d,useLocalStorage:a,initialTransfers:n,onAdd:p,onUpdate:C,onRemove:f});return jsx(t.Provider,{value:m,children:i})};var q={Provider:e,Manager:a};export{q as CrossBorder,e as CrossBorderProvider,A as useCrossBorderCompound};//# sourceMappingURL=cross-border.mjs.map
3
- //# sourceMappingURL=cross-border.mjs.map
2
+ import {a}from'./chunk-GTYXVAJX.mjs';export{a as CrossBorderTransferManager}from'./chunk-GTYXVAJX.mjs';import {a as a$1}from'./chunk-KDAZQO3N.mjs';export{a as useCrossBorderTransfer}from'./chunk-KDAZQO3N.mjs';export{a as COUNTRY_ADEQUACY_MAP,h as assessTransferRisk,c as getAdequateCountries,b as getCountryAdequacy,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,d as requiresNDPCApproval,g as validateTransfer}from'./chunk-7BJXI2HI.mjs';import'./chunk-SFGW37LE.mjs';import'./chunk-DBZSN4WP.mjs';import'./chunk-ZJYULEER.mjs';import {createContext,useContext}from'react';import {jsx}from'react/jsx-runtime';var s=createContext(null);function A(){let r=useContext(s);if(!r)throw new Error("CrossBorder compound components must be wrapped in <CrossBorder.Provider>. Example: <CrossBorder.Provider><CrossBorder.Manager /></CrossBorder.Provider>");return r}var t=({adapter:r,storageKey:d,useLocalStorage:a,initialTransfers:n,onAdd:p,onUpdate:C,onRemove:f,children:i})=>{let m=a$1({adapter:r,storageKey:d,useLocalStorage:a,initialTransfers:n,onAdd:p,onUpdate:C,onRemove:f});return jsx(s.Provider,{value:m,children:i})};var q={Provider:t,Manager:a};export{q as CrossBorder,t as CrossBorderProvider,A as useCrossBorderCompound};
package/dist/dpia.d.mts CHANGED
@@ -34,8 +34,8 @@ export declare const DPIAProvider: React__default.FC<DPIAProviderProps>;
34
34
 
35
35
  export declare interface DPIAProviderProps {
36
36
  sections: DPIASection[];
37
- initialAnswers?: Record<string, any>;
38
- adapter?: StorageAdapter<Record<string, any>>;
37
+ initialAnswers?: DPIAAnswerMap;
38
+ adapter?: StorageAdapter<DPIAAnswerMap>;
39
39
  storageKey?: string;
40
40
  useLocalStorage?: boolean;
41
41
  onComplete?: (result: DPIAResult) => void;
@@ -85,8 +85,8 @@ export declare interface DPIAQuestion {
85
85
  }
86
86
 
87
87
  /**
88
- * DPIA questionnaire component. Implements NDPA Section 38 requirements
89
- * for conducting Data Protection Impact Assessments on high-risk processing activities.
88
+ * DPIA questionnaire component. Implements NDPA Section 28 requirements
89
+ * for conducting Data Privacy Impact Assessments on high-risk processing activities.
90
90
  */
91
91
  export declare const DPIAQuestionnaire: React__default.FC<DPIAQuestionnaireProps>;
92
92
 
package/dist/dpia.d.ts CHANGED
@@ -34,8 +34,8 @@ export declare const DPIAProvider: React__default.FC<DPIAProviderProps>;
34
34
 
35
35
  export declare interface DPIAProviderProps {
36
36
  sections: DPIASection[];
37
- initialAnswers?: Record<string, any>;
38
- adapter?: StorageAdapter<Record<string, any>>;
37
+ initialAnswers?: DPIAAnswerMap;
38
+ adapter?: StorageAdapter<DPIAAnswerMap>;
39
39
  storageKey?: string;
40
40
  useLocalStorage?: boolean;
41
41
  onComplete?: (result: DPIAResult) => void;
@@ -85,8 +85,8 @@ export declare interface DPIAQuestion {
85
85
  }
86
86
 
87
87
  /**
88
- * DPIA questionnaire component. Implements NDPA Section 38 requirements
89
- * for conducting Data Protection Impact Assessments on high-risk processing activities.
88
+ * DPIA questionnaire component. Implements NDPA Section 28 requirements
89
+ * for conducting Data Privacy Impact Assessments on high-risk processing activities.
90
90
  */
91
91
  export declare const DPIAQuestionnaire: React__default.FC<DPIAQuestionnaireProps>;
92
92
 
package/dist/dpia.js CHANGED
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- 'use strict';var chunk3VQAYQR7_js=require('./chunk-3VQAYQR7.js'),chunk5HL4UBFV_js=require('./chunk-5HL4UBFV.js'),chunkOPYQIJKY_js=require('./chunk-OPYQIJKY.js'),chunkP42Z5CFE_js=require('./chunk-P42Z5CFE.js');require('./chunk-E64TU6IU.js'),require('./chunk-ELKB2AFZ.js');var chunkMQFZHA2D_js=require('./chunk-MQFZHA2D.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var i=react.createContext(null);function v(){let o=react.useContext(i);if(!o)throw new Error("DPIA compound components must be wrapped in <DPIA.Provider>. Example: <DPIA.Provider sections={...}><DPIA.Questionnaire /></DPIA.Provider>");return o}var p=({sections:o,initialAnswers:a,adapter:m,storageKey:I,useLocalStorage:A,onComplete:d,children:D})=>{let u=chunkOPYQIJKY_js.a({sections:o,initialAnswers:a,adapter:m,storageKey:I,useLocalStorage:A,onComplete:d}),c=chunkMQFZHA2D_js.b(chunkMQFZHA2D_js.a({},u),{sections:o});return jsxRuntime.jsx(i.Provider,{value:c,children:D})};var y={Provider:p,Questionnaire:chunk5HL4UBFV_js.a,Report:chunk3VQAYQR7_js.a,StepIndicator:chunk3VQAYQR7_js.b};Object.defineProperty(exports,"DPIAReport",{enumerable:true,get:function(){return chunk3VQAYQR7_js.a}});Object.defineProperty(exports,"StepIndicator",{enumerable:true,get:function(){return chunk3VQAYQR7_js.b}});Object.defineProperty(exports,"DPIAQuestionnaire",{enumerable:true,get:function(){return chunk5HL4UBFV_js.a}});Object.defineProperty(exports,"useDPIA",{enumerable:true,get:function(){return chunkOPYQIJKY_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkP42Z5CFE_js.a}});exports.DPIA=y;exports.DPIAProvider=p;exports.useDPIACompound=v;//# sourceMappingURL=dpia.js.map
3
- //# sourceMappingURL=dpia.js.map
2
+ 'use strict';var chunkEZCGTHQV_js=require('./chunk-EZCGTHQV.js'),chunkWDDCKYWA_js=require('./chunk-WDDCKYWA.js'),chunkC7IDR2IV_js=require('./chunk-C7IDR2IV.js'),chunkTQZWJGJ2_js=require('./chunk-TQZWJGJ2.js');require('./chunk-ZVOIR4QH.js'),require('./chunk-AME4HJR4.js'),require('./chunk-VWED6UTN.js');var chunkRFPLZDIO_js=require('./chunk-RFPLZDIO.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var n=react.createContext(null);function v(){let o=react.useContext(n);if(!o)throw new Error("DPIA compound components must be wrapped in <DPIA.Provider>. Example: <DPIA.Provider sections={...}><DPIA.Questionnaire /></DPIA.Provider>");return o}var i=({sections:o,initialAnswers:a,adapter:m,storageKey:A,useLocalStorage:I,onComplete:D,children:d})=>{let u=chunkC7IDR2IV_js.a({sections:o,initialAnswers:a,adapter:m,storageKey:A,useLocalStorage:I,onComplete:D}),f=chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},u),{sections:o});return jsxRuntime.jsx(n.Provider,{value:f,children:d})};var C={Provider:i,Questionnaire:chunkWDDCKYWA_js.a,Report:chunkEZCGTHQV_js.a,StepIndicator:chunkEZCGTHQV_js.b};Object.defineProperty(exports,"DPIAReport",{enumerable:true,get:function(){return chunkEZCGTHQV_js.a}});Object.defineProperty(exports,"StepIndicator",{enumerable:true,get:function(){return chunkEZCGTHQV_js.b}});Object.defineProperty(exports,"DPIAQuestionnaire",{enumerable:true,get:function(){return chunkWDDCKYWA_js.a}});Object.defineProperty(exports,"useDPIA",{enumerable:true,get:function(){return chunkC7IDR2IV_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkTQZWJGJ2_js.a}});exports.DPIA=C;exports.DPIAProvider=i;exports.useDPIACompound=v;
package/dist/dpia.mjs CHANGED
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- import {b,a}from'./chunk-TCN22KYP.mjs';export{a as DPIAReport,b as StepIndicator}from'./chunk-TCN22KYP.mjs';import {a as a$1}from'./chunk-LJNNPAFU.mjs';export{a as DPIAQuestionnaire}from'./chunk-LJNNPAFU.mjs';import {a as a$2}from'./chunk-6FGCGLH5.mjs';export{a as useDPIA}from'./chunk-6FGCGLH5.mjs';export{a as assessDPIARisk}from'./chunk-6TA2MVTU.mjs';import'./chunk-AYKLAEOU.mjs';import'./chunk-6WIP33TW.mjs';import {b as b$1,a as a$3}from'./chunk-WWT2ZSNU.mjs';import {createContext,useContext}from'react';import {jsx}from'react/jsx-runtime';var i=createContext(null);function v(){let o=useContext(i);if(!o)throw new Error("DPIA compound components must be wrapped in <DPIA.Provider>. Example: <DPIA.Provider sections={...}><DPIA.Questionnaire /></DPIA.Provider>");return o}var p=({sections:o,initialAnswers:a,adapter:m,storageKey:I,useLocalStorage:A,onComplete:d,children:D})=>{let u=a$2({sections:o,initialAnswers:a,adapter:m,storageKey:I,useLocalStorage:A,onComplete:d}),c=b$1(a$3({},u),{sections:o});return jsx(i.Provider,{value:c,children:D})};var y={Provider:p,Questionnaire:a$1,Report:a,StepIndicator:b};export{y as DPIA,p as DPIAProvider,v as useDPIACompound};//# sourceMappingURL=dpia.mjs.map
3
- //# sourceMappingURL=dpia.mjs.map
2
+ import {b,a}from'./chunk-O45PKBZA.mjs';export{a as DPIAReport,b as StepIndicator}from'./chunk-O45PKBZA.mjs';import {a as a$1}from'./chunk-ZQZJNKVB.mjs';export{a as DPIAQuestionnaire}from'./chunk-ZQZJNKVB.mjs';import {a as a$2}from'./chunk-H3XJV2IR.mjs';export{a as useDPIA}from'./chunk-H3XJV2IR.mjs';export{a as assessDPIARisk}from'./chunk-LRRENTT5.mjs';import'./chunk-ITCY2Z66.mjs';import'./chunk-SFGW37LE.mjs';import'./chunk-DBZSN4WP.mjs';import {b as b$1,a as a$3}from'./chunk-ZJYULEER.mjs';import {createContext,useContext}from'react';import {jsx}from'react/jsx-runtime';var n=createContext(null);function v(){let o=useContext(n);if(!o)throw new Error("DPIA compound components must be wrapped in <DPIA.Provider>. Example: <DPIA.Provider sections={...}><DPIA.Questionnaire /></DPIA.Provider>");return o}var i=({sections:o,initialAnswers:a,adapter:m,storageKey:A,useLocalStorage:I,onComplete:D,children:d})=>{let u=a$2({sections:o,initialAnswers:a,adapter:m,storageKey:A,useLocalStorage:I,onComplete:D}),f=b$1(a$3({},u),{sections:o});return jsx(n.Provider,{value:f,children:d})};var C={Provider:i,Questionnaire:a$1,Report:a,StepIndicator:b};export{C as DPIA,i as DPIAProvider,v as useDPIACompound};
package/dist/dsr.d.mts CHANGED
@@ -199,7 +199,7 @@ export declare interface DSRRequest {
199
199
  }
200
200
 
201
201
  /**
202
- * Data Subject Request form component. Implements NDPA Part IV, Sections 29-36
202
+ * Data Subject Request form component. Implements NDPA Part VI (Sections 34-38)
203
203
  * covering data subject rights including access, rectification, erasure, and portability.
204
204
  */
205
205
  export declare const DSRRequestForm: React__default.FC<DSRRequestFormProps>;
@@ -438,20 +438,25 @@ declare interface DSRTrackerProps {
438
438
  }
439
439
 
440
440
  /**
441
- * Data Subject Rights types aligned with NDPA 2023 Part IV (Sections 29-36)
441
+ * Data Subject Rights types aligned with NDPA 2023 Part VI (Sections 34-38)
442
+ * and the related provisions in Part V (Section 27 — information to the data subject)
443
+ * and Part X (Section 46 — complaint to the Commission).
444
+ *
445
+ * Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
442
446
  */
443
447
  /**
444
- * Types of data subject requests per NDPA Part IV
445
- * - 'information': Right to be informed (Section 29)
446
- * - 'access': Right of access (Section 30)
447
- * - 'rectification': Right to rectification (Section 31)
448
- * - 'erasure': Right to erasure (Section 32)
449
- * - 'restriction': Right to restrict processing (Section 33)
450
- * - 'portability': Right to data portability (Section 34)
451
- * - 'objection': Right to object (Section 35)
452
- * - 'automated_decision_making': Rights related to automated decision-making (Section 36)
448
+ * Types of data subject requests per NDPA Part VI
449
+ * - 'information': Right to be informed (Section 27 — provision of information; Section 34(1)(a))
450
+ * - 'access': Right of access / confirmation + data copy (Section 34(1)(a)–(b))
451
+ * - 'rectification': Right to rectification (Section 34(1)(c))
452
+ * - 'erasure': Right to erasure (Section 34(1)(d), Section 34(2))
453
+ * - 'restriction': Right to restrict processing (Section 34(1)(e))
454
+ * - 'portability': Right to data portability (Section 38)
455
+ * - 'objection': Right to object (Section 36)
456
+ * - 'automated_decision_making': Rights re. automated decisions / profiling (Section 37)
457
+ * - 'withdraw_consent': Right to withdraw consent (Section 35)
453
458
  */
454
- export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making';
459
+ export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making' | 'withdraw_consent';
455
460
 
456
461
  /**
457
462
  * Formats a DSR request for display or submission
@@ -481,7 +486,9 @@ export declare interface RequestType {
481
486
  /** Description of what this request type entails */
482
487
  description: string;
483
488
  /**
484
- * NDPA section reference (e.g., "Section 30" for access requests)
489
+ * NDPA 2023 section reference for this right
490
+ * (e.g., "Section 34(1)(a)" for access, "Section 38" for portability).
491
+ * Used for display purposes only — verify the exact subsection with counsel.
485
492
  */
486
493
  ndpaSection?: string;
487
494
  /**
@@ -559,9 +566,10 @@ declare interface UseDSRReturn {
559
566
  */
560
567
  requests: DSRRequest[];
561
568
  /**
562
- * Submit a new request
569
+ * Submit a new request. The hook assigns `id`, `status`, `createdAt`,
570
+ * `updatedAt`, and `dueDate` — pass everything else.
563
571
  */
564
- submitRequest: (requestData: Omit<DSRRequest, 'id' | 'status' | 'submittedAt' | 'updatedAt' | 'estimatedCompletionDate'>) => DSRRequest;
572
+ submitRequest: (requestData: Omit<DSRRequest, 'id' | 'status' | 'createdAt' | 'updatedAt' | 'dueDate'>) => DSRRequest;
565
573
  /**
566
574
  * Update an existing request
567
575
  */
@@ -573,7 +581,12 @@ declare interface UseDSRReturn {
573
581
  /**
574
582
  * Get requests by status
575
583
  */
576
- getRequestsByStatus: (status: RequestStatus) => DSRRequest[];
584
+ /**
585
+ * Filter requests by status. Accepts both the modern `DSRStatus` union and
586
+ * the deprecated `RequestStatus` for backward compatibility — pass the
587
+ * modern values (`'pending' | 'awaitingVerification' | 'inProgress' | ...`).
588
+ */
589
+ getRequestsByStatus: (status: DSRStatus | RequestStatus) => DSRRequest[];
577
590
  /**
578
591
  * Get requests by type
579
592
  */
@@ -646,7 +659,7 @@ export declare interface ValidateDsrSubmissionOptions {
646
659
  /**
647
660
  * Allowed request types. When provided, the payload's `requestType`
648
661
  * must be one of these — useful for locking the server to a specific
649
- * set of supported NDPA Part IV §29-36 rights.
662
+ * set of supported NDPA Part VI §34-38 (plus §35, §36, §37) data-subject rights.
650
663
  */
651
664
  allowedRequestTypes?: string[];
652
665
  }
package/dist/dsr.d.ts CHANGED
@@ -199,7 +199,7 @@ export declare interface DSRRequest {
199
199
  }
200
200
 
201
201
  /**
202
- * Data Subject Request form component. Implements NDPA Part IV, Sections 29-36
202
+ * Data Subject Request form component. Implements NDPA Part VI (Sections 34-38)
203
203
  * covering data subject rights including access, rectification, erasure, and portability.
204
204
  */
205
205
  export declare const DSRRequestForm: React__default.FC<DSRRequestFormProps>;
@@ -438,20 +438,25 @@ declare interface DSRTrackerProps {
438
438
  }
439
439
 
440
440
  /**
441
- * Data Subject Rights types aligned with NDPA 2023 Part IV (Sections 29-36)
441
+ * Data Subject Rights types aligned with NDPA 2023 Part VI (Sections 34-38)
442
+ * and the related provisions in Part V (Section 27 — information to the data subject)
443
+ * and Part X (Section 46 — complaint to the Commission).
444
+ *
445
+ * Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
442
446
  */
443
447
  /**
444
- * Types of data subject requests per NDPA Part IV
445
- * - 'information': Right to be informed (Section 29)
446
- * - 'access': Right of access (Section 30)
447
- * - 'rectification': Right to rectification (Section 31)
448
- * - 'erasure': Right to erasure (Section 32)
449
- * - 'restriction': Right to restrict processing (Section 33)
450
- * - 'portability': Right to data portability (Section 34)
451
- * - 'objection': Right to object (Section 35)
452
- * - 'automated_decision_making': Rights related to automated decision-making (Section 36)
448
+ * Types of data subject requests per NDPA Part VI
449
+ * - 'information': Right to be informed (Section 27 — provision of information; Section 34(1)(a))
450
+ * - 'access': Right of access / confirmation + data copy (Section 34(1)(a)–(b))
451
+ * - 'rectification': Right to rectification (Section 34(1)(c))
452
+ * - 'erasure': Right to erasure (Section 34(1)(d), Section 34(2))
453
+ * - 'restriction': Right to restrict processing (Section 34(1)(e))
454
+ * - 'portability': Right to data portability (Section 38)
455
+ * - 'objection': Right to object (Section 36)
456
+ * - 'automated_decision_making': Rights re. automated decisions / profiling (Section 37)
457
+ * - 'withdraw_consent': Right to withdraw consent (Section 35)
453
458
  */
454
- export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making';
459
+ export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making' | 'withdraw_consent';
455
460
 
456
461
  /**
457
462
  * Formats a DSR request for display or submission
@@ -481,7 +486,9 @@ export declare interface RequestType {
481
486
  /** Description of what this request type entails */
482
487
  description: string;
483
488
  /**
484
- * NDPA section reference (e.g., "Section 30" for access requests)
489
+ * NDPA 2023 section reference for this right
490
+ * (e.g., "Section 34(1)(a)" for access, "Section 38" for portability).
491
+ * Used for display purposes only — verify the exact subsection with counsel.
485
492
  */
486
493
  ndpaSection?: string;
487
494
  /**
@@ -559,9 +566,10 @@ declare interface UseDSRReturn {
559
566
  */
560
567
  requests: DSRRequest[];
561
568
  /**
562
- * Submit a new request
569
+ * Submit a new request. The hook assigns `id`, `status`, `createdAt`,
570
+ * `updatedAt`, and `dueDate` — pass everything else.
563
571
  */
564
- submitRequest: (requestData: Omit<DSRRequest, 'id' | 'status' | 'submittedAt' | 'updatedAt' | 'estimatedCompletionDate'>) => DSRRequest;
572
+ submitRequest: (requestData: Omit<DSRRequest, 'id' | 'status' | 'createdAt' | 'updatedAt' | 'dueDate'>) => DSRRequest;
565
573
  /**
566
574
  * Update an existing request
567
575
  */
@@ -573,7 +581,12 @@ declare interface UseDSRReturn {
573
581
  /**
574
582
  * Get requests by status
575
583
  */
576
- getRequestsByStatus: (status: RequestStatus) => DSRRequest[];
584
+ /**
585
+ * Filter requests by status. Accepts both the modern `DSRStatus` union and
586
+ * the deprecated `RequestStatus` for backward compatibility — pass the
587
+ * modern values (`'pending' | 'awaitingVerification' | 'inProgress' | ...`).
588
+ */
589
+ getRequestsByStatus: (status: DSRStatus | RequestStatus) => DSRRequest[];
577
590
  /**
578
591
  * Get requests by type
579
592
  */
@@ -646,7 +659,7 @@ export declare interface ValidateDsrSubmissionOptions {
646
659
  /**
647
660
  * Allowed request types. When provided, the payload's `requestType`
648
661
  * must be one of these — useful for locking the server to a specific
649
- * set of supported NDPA Part IV §29-36 rights.
662
+ * set of supported NDPA Part VI §34-38 (plus §35, §36, §37) data-subject rights.
650
663
  */
651
664
  allowedRequestTypes?: string[];
652
665
  }
package/dist/dsr.js CHANGED
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- 'use strict';var chunkVIQUXWJC_js=require('./chunk-VIQUXWJC.js'),chunkZPKVLTSX_js=require('./chunk-ZPKVLTSX.js'),chunkCKJAECGV_js=require('./chunk-CKJAECGV.js'),chunkJ5WCPZLW_js=require('./chunk-J5WCPZLW.js');require('./chunk-I54CDQGN.js'),require('./chunk-E64TU6IU.js'),require('./chunk-ELKB2AFZ.js');var chunkMQFZHA2D_js=require('./chunk-MQFZHA2D.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var m=react.createContext(null);function P(){let e=react.useContext(m);if(!e)throw new Error("DSR compound components must be wrapped in <DSR.Provider>. Example: <DSR.Provider requestTypes={...}><DSR.Form /></DSR.Provider>");return e}var s=({requestTypes:e,adapter:S,storageKey:D,useLocalStorage:d,onSubmit:u,onUpdate:i,children:n})=>{let f=chunkCKJAECGV_js.a({requestTypes:e,adapter:S,storageKey:D,useLocalStorage:d,onSubmit:u,onUpdate:i}),x=chunkMQFZHA2D_js.b(chunkMQFZHA2D_js.a({},f),{requestTypes:e});return jsxRuntime.jsx(m.Provider,{value:x,children:n})};var C={Provider:s,Form:chunkZPKVLTSX_js.a,Dashboard:chunkVIQUXWJC_js.a,Tracker:chunkVIQUXWJC_js.b};Object.defineProperty(exports,"DSRDashboard",{enumerable:true,get:function(){return chunkVIQUXWJC_js.a}});Object.defineProperty(exports,"DSRTracker",{enumerable:true,get:function(){return chunkVIQUXWJC_js.b}});Object.defineProperty(exports,"DSRRequestForm",{enumerable:true,get:function(){return chunkZPKVLTSX_js.a}});Object.defineProperty(exports,"useDSR",{enumerable:true,get:function(){return chunkCKJAECGV_js.a}});Object.defineProperty(exports,"formatDSRRequest",{enumerable:true,get:function(){return chunkJ5WCPZLW_js.b}});Object.defineProperty(exports,"validateDsrSubmission",{enumerable:true,get:function(){return chunkJ5WCPZLW_js.a}});exports.DSR=C;exports.DSRProvider=s;exports.useDSRCompound=P;//# sourceMappingURL=dsr.js.map
3
- //# sourceMappingURL=dsr.js.map
2
+ 'use strict';var chunkCR2QZTGW_js=require('./chunk-CR2QZTGW.js'),chunkW47OSMT6_js=require('./chunk-W47OSMT6.js'),chunkHBLGN4SD_js=require('./chunk-HBLGN4SD.js'),chunkL2BRFMVS_js=require('./chunk-L2BRFMVS.js');require('./chunk-UXUMYP4L.js'),require('./chunk-AME4HJR4.js'),require('./chunk-VWED6UTN.js');var chunkRFPLZDIO_js=require('./chunk-RFPLZDIO.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var p=react.createContext(null);function P(){let e=react.useContext(p);if(!e)throw new Error("DSR compound components must be wrapped in <DSR.Provider>. Example: <DSR.Provider requestTypes={...}><DSR.Form /></DSR.Provider>");return e}var m=({requestTypes:e,adapter:S,storageKey:D,useLocalStorage:d,onSubmit:u,onUpdate:i,children:n})=>{let f=chunkHBLGN4SD_js.a({requestTypes:e,adapter:S,storageKey:D,useLocalStorage:d,onSubmit:u,onUpdate:i}),x=chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},f),{requestTypes:e});return jsxRuntime.jsx(p.Provider,{value:x,children:n})};var C={Provider:m,Form:chunkW47OSMT6_js.a,Dashboard:chunkCR2QZTGW_js.a,Tracker:chunkCR2QZTGW_js.b};Object.defineProperty(exports,"DSRDashboard",{enumerable:true,get:function(){return chunkCR2QZTGW_js.a}});Object.defineProperty(exports,"DSRTracker",{enumerable:true,get:function(){return chunkCR2QZTGW_js.b}});Object.defineProperty(exports,"DSRRequestForm",{enumerable:true,get:function(){return chunkW47OSMT6_js.a}});Object.defineProperty(exports,"useDSR",{enumerable:true,get:function(){return chunkHBLGN4SD_js.a}});Object.defineProperty(exports,"formatDSRRequest",{enumerable:true,get:function(){return chunkL2BRFMVS_js.b}});Object.defineProperty(exports,"validateDsrSubmission",{enumerable:true,get:function(){return chunkL2BRFMVS_js.a}});exports.DSR=C;exports.DSRProvider=m;exports.useDSRCompound=P;
package/dist/dsr.mjs CHANGED
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- import {b,a}from'./chunk-SCWNM4PC.mjs';export{a as DSRDashboard,b as DSRTracker}from'./chunk-SCWNM4PC.mjs';import {a as a$1}from'./chunk-6HZL2WDU.mjs';export{a as DSRRequestForm}from'./chunk-6HZL2WDU.mjs';import {a as a$2}from'./chunk-CWHBCQGT.mjs';export{a as useDSR}from'./chunk-CWHBCQGT.mjs';export{b as formatDSRRequest,a as validateDsrSubmission}from'./chunk-B4Z5MBUC.mjs';import'./chunk-GKKAK6ES.mjs';import'./chunk-AYKLAEOU.mjs';import'./chunk-6WIP33TW.mjs';import {b as b$1,a as a$3}from'./chunk-WWT2ZSNU.mjs';import {createContext,useContext}from'react';import {jsx}from'react/jsx-runtime';var m=createContext(null);function P(){let e=useContext(m);if(!e)throw new Error("DSR compound components must be wrapped in <DSR.Provider>. Example: <DSR.Provider requestTypes={...}><DSR.Form /></DSR.Provider>");return e}var s=({requestTypes:e,adapter:S,storageKey:D,useLocalStorage:d,onSubmit:u,onUpdate:i,children:n})=>{let f=a$2({requestTypes:e,adapter:S,storageKey:D,useLocalStorage:d,onSubmit:u,onUpdate:i}),x=b$1(a$3({},f),{requestTypes:e});return jsx(m.Provider,{value:x,children:n})};var C={Provider:s,Form:a$1,Dashboard:a,Tracker:b};export{C as DSR,s as DSRProvider,P as useDSRCompound};//# sourceMappingURL=dsr.mjs.map
3
- //# sourceMappingURL=dsr.mjs.map
2
+ import {b,a}from'./chunk-66NQ5CVY.mjs';export{a as DSRDashboard,b as DSRTracker}from'./chunk-66NQ5CVY.mjs';import {a as a$1}from'./chunk-XJO4DH3L.mjs';export{a as DSRRequestForm}from'./chunk-XJO4DH3L.mjs';import {a as a$2}from'./chunk-MPBPAEZC.mjs';export{a as useDSR}from'./chunk-MPBPAEZC.mjs';export{b as formatDSRRequest,a as validateDsrSubmission}from'./chunk-RZ6GC6WN.mjs';import'./chunk-EWVK45Z3.mjs';import'./chunk-SFGW37LE.mjs';import'./chunk-DBZSN4WP.mjs';import {b as b$1,a as a$3}from'./chunk-ZJYULEER.mjs';import {createContext,useContext}from'react';import {jsx}from'react/jsx-runtime';var p=createContext(null);function P(){let e=useContext(p);if(!e)throw new Error("DSR compound components must be wrapped in <DSR.Provider>. Example: <DSR.Provider requestTypes={...}><DSR.Form /></DSR.Provider>");return e}var m=({requestTypes:e,adapter:S,storageKey:D,useLocalStorage:d,onSubmit:u,onUpdate:i,children:n})=>{let f=a$2({requestTypes:e,adapter:S,storageKey:D,useLocalStorage:d,onSubmit:u,onUpdate:i}),x=b$1(a$3({},f),{requestTypes:e});return jsx(p.Provider,{value:x,children:n})};var C={Provider:m,Form:a$1,Dashboard:a,Tracker:b};export{C as DSR,m as DSRProvider,P as useDSRCompound};