@tantainnovative/ndpr-toolkit 3.4.1 → 3.5.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.
- package/CHANGELOG.md +12 -0
- package/dist/adapters.d.mts +34 -25
- package/dist/adapters.d.ts +34 -25
- package/dist/breach.d.mts +803 -44
- package/dist/breach.d.ts +803 -44
- package/dist/breach.js +1 -1
- package/dist/breach.mjs +1 -1
- package/dist/{chunk-ASLMPY54.js → chunk-3EGQWLJ6.js} +3 -3
- package/dist/chunk-B4Z5MBUC.mjs +2 -0
- package/dist/{chunk-LSCMXAPY.mjs → chunk-CKGJK4D7.mjs} +3 -3
- package/dist/{chunk-XSEZDQLB.js → chunk-CKJAECGV.js} +2 -2
- package/dist/{chunk-AHSMDPG5.js → chunk-CPK5D5FY.js} +2 -2
- package/dist/{chunk-DCJK5OZT.mjs → chunk-CWHBCQGT.mjs} +2 -2
- package/dist/{chunk-MLOWRZXO.mjs → chunk-F5TXUA4O.mjs} +3 -3
- package/dist/{chunk-BN77GP4W.mjs → chunk-GN5C32JB.mjs} +2 -2
- package/dist/{chunk-ZLSWOFAY.mjs → chunk-GRLIPT5V.mjs} +2 -2
- package/dist/{chunk-DUY6F3GT.mjs → chunk-H3EYBSVP.mjs} +3 -3
- package/dist/{chunk-NFJ4CB63.mjs → chunk-ID2NYIVE.mjs} +3 -3
- package/dist/chunk-J5WCPZLW.js +2 -0
- package/dist/{chunk-P2YV6DR3.js → chunk-LIM64IV2.js} +3 -3
- package/dist/chunk-LU7PKE7Y.mjs +2 -0
- package/dist/{chunk-HQSU7LGM.js → chunk-LWXZMKC2.js} +4 -4
- package/dist/{chunk-4BOEFDDE.js → chunk-ORFC66EA.js} +3 -3
- package/dist/{chunk-VTITKWGX.mjs → chunk-QSVVAZVT.mjs} +2 -2
- package/dist/chunk-SCWNM4PC.mjs +2 -0
- package/dist/{chunk-EHAZIKDX.js → chunk-SKKOMFXH.js} +2 -2
- package/dist/{chunk-WH6ZMUOS.mjs → chunk-TUNQUVHU.mjs} +2 -2
- package/dist/chunk-TV4U6AIS.js +2 -0
- package/dist/{chunk-ZYLDLGFL.js → chunk-VIQUXWJC.js} +2 -2
- package/dist/{chunk-SUEGUY35.js → chunk-XIM7KMD6.js} +2 -2
- package/dist/{chunk-P6QAFBCV.js → chunk-XNSZ7KUH.js} +2 -2
- package/dist/consent.d.mts +648 -84
- package/dist/consent.d.ts +648 -84
- package/dist/consent.js +1 -1
- package/dist/consent.mjs +1 -1
- package/dist/core.d.mts +2049 -23
- package/dist/core.d.ts +2049 -23
- package/dist/core.js +1 -1
- package/dist/core.mjs +1 -1
- package/dist/cross-border.d.mts +470 -99
- package/dist/cross-border.d.ts +470 -99
- package/dist/dpia.d.mts +591 -37
- package/dist/dpia.d.ts +591 -37
- package/dist/dsr.d.mts +654 -37
- package/dist/dsr.d.ts +654 -37
- package/dist/dsr.js +1 -1
- package/dist/dsr.mjs +1 -1
- package/dist/hooks.d.mts +2174 -30
- package/dist/hooks.d.ts +2174 -30
- package/dist/hooks.js +1 -1
- package/dist/hooks.mjs +1 -1
- package/dist/index.d.mts +4428 -43
- package/dist/index.d.ts +4428 -43
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/lawful-basis.d.mts +368 -32
- package/dist/lawful-basis.d.ts +368 -32
- package/dist/policy.d.mts +1178 -83
- package/dist/policy.d.ts +1178 -83
- package/dist/policy.js +1 -1
- package/dist/policy.mjs +1 -1
- package/dist/presets.d.mts +1020 -114
- package/dist/presets.d.ts +1020 -114
- package/dist/presets.js +1 -1
- package/dist/presets.mjs +1 -1
- package/dist/ropa.d.mts +396 -31
- package/dist/ropa.d.ts +396 -31
- package/dist/ropa.js +1 -1
- package/dist/ropa.mjs +1 -1
- package/dist/server.d.mts +2133 -24
- package/dist/server.d.ts +2133 -24
- package/dist/server.js +1 -1
- package/dist/server.mjs +1 -1
- package/dist/unstyled.d.mts +523 -55
- package/dist/unstyled.d.ts +523 -55
- package/dist/unstyled.js +1 -1
- package/dist/unstyled.mjs +1 -1
- package/package.json +3 -3
- package/dist/BreachReportForm-DpRrBoxU.d.ts +0 -158
- package/dist/BreachReportForm-yJ2Zl6gz.d.mts +0 -158
- package/dist/ConsentBanner-F5ayys5K.d.mts +0 -156
- package/dist/ConsentBanner-VqIPophc.d.ts +0 -156
- package/dist/ConsentManager-C7I3PDe8.d.mts +0 -105
- package/dist/ConsentManager-CQ2IZtUU.d.ts +0 -105
- package/dist/CrossBorderTransferManager-D5Lc0e46.d.ts +0 -90
- package/dist/CrossBorderTransferManager-DkZhv9vD.d.mts +0 -90
- package/dist/DPIAQuestionnaire-VXBoWFMC.d.ts +0 -123
- package/dist/DPIAQuestionnaire-jkt1Veb6.d.mts +0 -123
- package/dist/DSRRequestForm-D8rPTNmU.d.ts +0 -146
- package/dist/DSRRequestForm-DRouEr9j.d.mts +0 -146
- package/dist/DSRTracker-Bl__d4df.d.ts +0 -163
- package/dist/DSRTracker-CSVDfgQQ.d.mts +0 -163
- package/dist/LawfulBasisTracker-CBqOxX1D.d.mts +0 -85
- package/dist/LawfulBasisTracker-Cg30NbDA.d.ts +0 -85
- package/dist/NDPRDashboard-CLJpEg0X.d.mts +0 -44
- package/dist/NDPRDashboard-DDWNd2Ah.d.ts +0 -44
- package/dist/NDPRProvider-DYFb8xEl.d.ts +0 -68
- package/dist/NDPRProvider-U3QNu6MA.d.mts +0 -68
- package/dist/PolicyExporter-Bgi6nz82.d.mts +0 -291
- package/dist/PolicyExporter-BnvuFncj.d.ts +0 -291
- package/dist/ROPAManager-BS4eB8Hw.d.mts +0 -79
- package/dist/ROPAManager-qxTrXLkD.d.ts +0 -79
- package/dist/RegulatoryReportGenerator-BUYgzTTT.d.ts +0 -282
- package/dist/RegulatoryReportGenerator-DwcHcEFp.d.mts +0 -282
- package/dist/StepIndicator-CgrlokSV.d.ts +0 -171
- package/dist/StepIndicator-W8S_QjgO.d.mts +0 -171
- package/dist/breach-B_-6lDqS.d.mts +0 -17
- package/dist/breach-CzXqSsaY.d.ts +0 -17
- package/dist/breach-Eu9byel8.d.mts +0 -185
- package/dist/breach-Eu9byel8.d.ts +0 -185
- package/dist/chunk-2L7BSG7G.mjs +0 -2
- package/dist/chunk-5X32J5IA.mjs +0 -2
- package/dist/chunk-7D2OIPHH.mjs +0 -2
- package/dist/chunk-JKKRPS4P.js +0 -2
- package/dist/chunk-UHTJ6UFW.js +0 -2
- package/dist/compliance-score-racQe_E_.d.mts +0 -115
- package/dist/compliance-score-racQe_E_.d.ts +0 -115
- package/dist/consent-CmVzqZUk.d.mts +0 -99
- package/dist/consent-CmVzqZUk.d.ts +0 -99
- package/dist/consent-audit-BdByjYlM.d.mts +0 -65
- package/dist/consent-audit-DhbfMR0n.d.ts +0 -65
- package/dist/cross-border-BBi9rZyO.d.mts +0 -54
- package/dist/cross-border-Dy-U9Hu6.d.ts +0 -54
- package/dist/cross-border-UyT00llA.d.mts +0 -141
- package/dist/cross-border-UyT00llA.d.ts +0 -141
- package/dist/docx-4n8g4zul.d.mts +0 -64
- package/dist/docx-VvcTLYZM.d.ts +0 -64
- package/dist/dpia-D82hUrJe.d.ts +0 -15
- package/dist/dpia-DQDFw2_l.d.mts +0 -15
- package/dist/dpia-c9GiiOq0.d.mts +0 -137
- package/dist/dpia-c9GiiOq0.d.ts +0 -137
- package/dist/dsr-CIx5sd7e.d.ts +0 -14
- package/dist/dsr-XZ_HqTlA.d.mts +0 -14
- package/dist/dsr-yKbqX531.d.mts +0 -128
- package/dist/dsr-yKbqX531.d.ts +0 -128
- package/dist/lawful-basis-BEyI0kGg.d.ts +0 -57
- package/dist/lawful-basis-C2eGaoHM.d.mts +0 -57
- package/dist/lawful-basis-Cv1VmDLn.d.mts +0 -112
- package/dist/lawful-basis-Cv1VmDLn.d.ts +0 -112
- package/dist/locale-CxJx2tzn.d.mts +0 -25
- package/dist/locale-DSkrtf-c.d.ts +0 -25
- package/dist/policy-engine-5qTfp2z4.d.mts +0 -174
- package/dist/policy-engine-DzPxskOK.d.ts +0 -174
- package/dist/policy-sections-9tCb7VU7.d.ts +0 -56
- package/dist/policy-sections-CBWcJv-R.d.mts +0 -56
- package/dist/policy-templates-DhLwq4R-.d.ts +0 -43
- package/dist/policy-templates-DwYl2329.d.mts +0 -43
- package/dist/privacy-Ca6te9Ir.d.mts +0 -138
- package/dist/privacy-Ca6te9Ir.d.ts +0 -138
- package/dist/ropa-BDTM06tr.d.ts +0 -152
- package/dist/ropa-CFHuT7jE.d.mts +0 -152
- package/dist/ropa-CyynscU6.d.ts +0 -51
- package/dist/ropa-NIgxd8uP.d.mts +0 -51
- package/dist/sanitize-CxxwKxAx.d.mts +0 -94
- package/dist/sanitize-CxxwKxAx.d.ts +0 -94
- package/dist/styling-BMDGQDgS.d.mts +0 -64
- package/dist/styling-BaoQtV06.d.ts +0 -64
- package/dist/types-DK2CoKOC.d.mts +0 -10
- package/dist/types-DK2CoKOC.d.ts +0 -10
- package/dist/useAdaptivePolicyWizard-BSLyltzZ.d.mts +0 -52
- package/dist/useAdaptivePolicyWizard-CL7C7MTZ.d.ts +0 -52
- package/dist/useBreach-CPr86Yan.d.mts +0 -115
- package/dist/useBreach-DkVXvtJK.d.ts +0 -115
- package/dist/useConsent-DCNkIJHR.d.mts +0 -75
- package/dist/useConsent-dOcELSfX.d.ts +0 -75
- package/dist/useCrossBorderTransfer-DixjLjN1.d.mts +0 -78
- package/dist/useCrossBorderTransfer-DvSq06lv.d.ts +0 -78
- package/dist/useDPIA-B6180UQn.d.mts +0 -109
- package/dist/useDPIA-CTqbNbww.d.ts +0 -109
- package/dist/useDSR-WvHk8_iu.d.mts +0 -85
- package/dist/useDSR-wH4H6hSM.d.ts +0 -85
- package/dist/useDefaultPrivacyPolicy-Cs2WQSYQ.d.mts +0 -162
- package/dist/useDefaultPrivacyPolicy-DkOqMg2e.d.ts +0 -162
- package/dist/useLawfulBasis-CKJ-kw84.d.mts +0 -79
- package/dist/useLawfulBasis-DFTmu1ca.d.ts +0 -79
- package/dist/useROPA-BSSU1rfx.d.ts +0 -76
- package/dist/useROPA-C2hjaBTz.d.mts +0 -76
package/dist/presets.d.mts
CHANGED
|
@@ -1,114 +1,1020 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Adequacy status of a destination country
|
|
5
|
+
*/
|
|
6
|
+
declare type AdequacyStatus = 'adequate' | 'inadequate' | 'pending_review' | 'unknown';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Breach notification types aligned with NDPA 2023 Section 40
|
|
10
|
+
* Data controllers must notify the NDPC within 72 hours of becoming aware of a breach
|
|
11
|
+
* Data subjects must be notified without undue delay when breach is likely to result in high risk
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Represents a data breach category
|
|
15
|
+
*/
|
|
16
|
+
declare interface BreachCategory {
|
|
17
|
+
/** Unique identifier for the category */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Display name for the category */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Description of this breach category */
|
|
22
|
+
description: string;
|
|
23
|
+
/** Default severity level for this category */
|
|
24
|
+
defaultSeverity: 'low' | 'medium' | 'high' | 'critical';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Represents the data submitted by the breach report form.
|
|
29
|
+
*/
|
|
30
|
+
declare interface BreachFormSubmission {
|
|
31
|
+
/** Title/summary of the breach */
|
|
32
|
+
title: string;
|
|
33
|
+
/** Detailed description of the breach */
|
|
34
|
+
description: string;
|
|
35
|
+
/** Breach category identifier */
|
|
36
|
+
category: string;
|
|
37
|
+
/** Timestamp (ms) when the breach was discovered */
|
|
38
|
+
discoveredAt: number;
|
|
39
|
+
/** Timestamp (ms) when the breach occurred (if known) */
|
|
40
|
+
occurredAt?: number;
|
|
41
|
+
/** Timestamp (ms) when the form was submitted */
|
|
42
|
+
reportedAt: number;
|
|
43
|
+
/** Person reporting the breach */
|
|
44
|
+
reporter: {
|
|
45
|
+
name: string;
|
|
46
|
+
email: string;
|
|
47
|
+
department: string;
|
|
48
|
+
phone?: string;
|
|
49
|
+
};
|
|
50
|
+
/** Systems or applications affected by the breach */
|
|
51
|
+
affectedSystems: string[];
|
|
52
|
+
/** Types of data involved in the breach */
|
|
53
|
+
dataTypes: string[];
|
|
54
|
+
/** Estimated number of affected data subjects */
|
|
55
|
+
estimatedAffectedSubjects?: number;
|
|
56
|
+
/** Current status of the breach */
|
|
57
|
+
status: 'ongoing' | 'contained' | 'resolved';
|
|
58
|
+
/** Initial actions taken to address the breach */
|
|
59
|
+
initialActions?: string;
|
|
60
|
+
/** File attachments included with the report */
|
|
61
|
+
attachments: Array<{
|
|
62
|
+
name: string;
|
|
63
|
+
type: string;
|
|
64
|
+
size: number;
|
|
65
|
+
file: File;
|
|
66
|
+
}>;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
declare interface BreachReportFormClassNames {
|
|
70
|
+
root?: string;
|
|
71
|
+
title?: string;
|
|
72
|
+
form?: string;
|
|
73
|
+
fieldGroup?: string;
|
|
74
|
+
label?: string;
|
|
75
|
+
input?: string;
|
|
76
|
+
select?: string;
|
|
77
|
+
textarea?: string;
|
|
78
|
+
submitButton?: string;
|
|
79
|
+
/** Alias for submitButton */
|
|
80
|
+
primaryButton?: string;
|
|
81
|
+
notice?: string;
|
|
82
|
+
/** Custom class applied when isSubmitting is true (e.g. a loading overlay) */
|
|
83
|
+
loadingOverlay?: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
declare interface ComplianceInput {
|
|
87
|
+
consent: {
|
|
88
|
+
hasConsentMechanism: boolean;
|
|
89
|
+
hasPurposeSpecification: boolean;
|
|
90
|
+
hasWithdrawalMechanism: boolean;
|
|
91
|
+
hasMinorProtection: boolean;
|
|
92
|
+
consentRecordsRetained: boolean;
|
|
93
|
+
};
|
|
94
|
+
dsr: {
|
|
95
|
+
hasRequestMechanism: boolean;
|
|
96
|
+
supportsAccess: boolean;
|
|
97
|
+
supportsRectification: boolean;
|
|
98
|
+
supportsErasure: boolean;
|
|
99
|
+
supportsPortability: boolean;
|
|
100
|
+
supportsObjection: boolean;
|
|
101
|
+
/** Expected max response time in days (>30 counts as a gap) */
|
|
102
|
+
responseTimelineDays: number;
|
|
103
|
+
};
|
|
104
|
+
dpia: {
|
|
105
|
+
conductedForHighRisk: boolean;
|
|
106
|
+
documentedRisks: boolean;
|
|
107
|
+
mitigationMeasures: boolean;
|
|
108
|
+
};
|
|
109
|
+
breach: {
|
|
110
|
+
hasNotificationProcess: boolean;
|
|
111
|
+
notifiesWithin72Hours: boolean;
|
|
112
|
+
hasRiskAssessment: boolean;
|
|
113
|
+
hasRecordKeeping: boolean;
|
|
114
|
+
};
|
|
115
|
+
policy: {
|
|
116
|
+
hasPrivacyPolicy: boolean;
|
|
117
|
+
isPubliclyAccessible: boolean;
|
|
118
|
+
/** ISO date string (YYYY-MM-DD); >13 months old counts as a gap */
|
|
119
|
+
lastUpdated: string;
|
|
120
|
+
coversAllSections: boolean;
|
|
121
|
+
};
|
|
122
|
+
lawfulBasis: {
|
|
123
|
+
documentedForAllProcessing: boolean;
|
|
124
|
+
hasLegitimateInterestAssessment: boolean;
|
|
125
|
+
};
|
|
126
|
+
crossBorder: {
|
|
127
|
+
hasTransferMechanisms: boolean;
|
|
128
|
+
adequacyAssessed: boolean;
|
|
129
|
+
ndpcApprovalObtained: boolean;
|
|
130
|
+
};
|
|
131
|
+
ropa: {
|
|
132
|
+
maintained: boolean;
|
|
133
|
+
includesAllProcessing: boolean;
|
|
134
|
+
/** ISO date string (YYYY-MM-DD); >6 months since review counts as a gap */
|
|
135
|
+
lastReviewed: string;
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
declare interface ConsentBannerClassNames {
|
|
140
|
+
root?: string;
|
|
141
|
+
container?: string;
|
|
142
|
+
title?: string;
|
|
143
|
+
description?: string;
|
|
144
|
+
optionsList?: string;
|
|
145
|
+
optionItem?: string;
|
|
146
|
+
optionCheckbox?: string;
|
|
147
|
+
optionLabel?: string;
|
|
148
|
+
optionDescription?: string;
|
|
149
|
+
buttonGroup?: string;
|
|
150
|
+
acceptButton?: string;
|
|
151
|
+
rejectButton?: string;
|
|
152
|
+
customizeButton?: string;
|
|
153
|
+
saveButton?: string;
|
|
154
|
+
customizePanel?: string;
|
|
155
|
+
selectAllButton?: string;
|
|
156
|
+
/** Alias for acceptButton */
|
|
157
|
+
primaryButton?: string;
|
|
158
|
+
/** Alias for rejectButton */
|
|
159
|
+
secondaryButton?: string;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Consent types aligned with NDPA 2023 Section 25-26
|
|
164
|
+
* Consent must be freely given, specific, informed, and unambiguous
|
|
165
|
+
*/
|
|
166
|
+
/**
|
|
167
|
+
* Represents a consent option that can be presented to users
|
|
168
|
+
*/
|
|
169
|
+
declare interface ConsentOption {
|
|
170
|
+
/** Unique identifier for the consent option */
|
|
171
|
+
id: string;
|
|
172
|
+
/** Display label for the consent option */
|
|
173
|
+
label: string;
|
|
174
|
+
/** Detailed description of what this consent option covers */
|
|
175
|
+
description: string;
|
|
176
|
+
/** Whether this consent option is required (cannot be declined) */
|
|
177
|
+
required: boolean;
|
|
178
|
+
/**
|
|
179
|
+
* The specific purpose for which data will be processed
|
|
180
|
+
* NDPA Section 25(2) requires consent to be specific to each purpose
|
|
181
|
+
*/
|
|
182
|
+
purpose: string;
|
|
183
|
+
/**
|
|
184
|
+
* Default state of the consent option
|
|
185
|
+
* @default false
|
|
186
|
+
*/
|
|
187
|
+
defaultValue?: boolean;
|
|
188
|
+
/**
|
|
189
|
+
* Categories of personal data covered by this consent option
|
|
190
|
+
*/
|
|
191
|
+
dataCategories?: string[];
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Represents the user's consent settings
|
|
196
|
+
*/
|
|
197
|
+
declare interface ConsentSettings {
|
|
198
|
+
/** Map of consent option IDs to boolean values indicating consent status */
|
|
199
|
+
consents: Record<string, boolean>;
|
|
200
|
+
/** Timestamp when consent was last updated */
|
|
201
|
+
timestamp: number;
|
|
202
|
+
/** Version of the consent form that was accepted */
|
|
203
|
+
version: string;
|
|
204
|
+
/** Method used to collect consent (e.g., "banner", "settings", "api") */
|
|
205
|
+
method: string;
|
|
206
|
+
/** Whether the user has actively made a choice (as opposed to default settings) */
|
|
207
|
+
hasInteracted: boolean;
|
|
208
|
+
/**
|
|
209
|
+
* The lawful basis under which processing is conducted
|
|
210
|
+
* Required by NDPA Section 25(1)
|
|
211
|
+
*/
|
|
212
|
+
lawfulBasis?: LawfulBasisType;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Represents a cross-border data transfer record
|
|
217
|
+
*/
|
|
218
|
+
declare interface CrossBorderTransfer {
|
|
219
|
+
/** Unique identifier */
|
|
220
|
+
id: string;
|
|
221
|
+
/** Destination country or territory */
|
|
222
|
+
destinationCountry: string;
|
|
223
|
+
/** ISO country code */
|
|
224
|
+
destinationCountryCode?: string;
|
|
225
|
+
/** Adequacy status of the destination */
|
|
226
|
+
adequacyStatus: AdequacyStatus;
|
|
227
|
+
/** The transfer mechanism being relied upon */
|
|
228
|
+
transferMechanism: TransferMechanism;
|
|
229
|
+
/** Categories of personal data being transferred */
|
|
230
|
+
dataCategories: string[];
|
|
231
|
+
/** Whether sensitive personal data is included */
|
|
232
|
+
includesSensitiveData: boolean;
|
|
233
|
+
/** Estimated number of data subjects whose data is transferred */
|
|
234
|
+
estimatedDataSubjects?: number;
|
|
235
|
+
/** Name of the recipient organization */
|
|
236
|
+
recipientOrganization: string;
|
|
237
|
+
/** Contact details of the recipient */
|
|
238
|
+
recipientContact: {
|
|
239
|
+
name: string;
|
|
240
|
+
email: string;
|
|
241
|
+
phone?: string;
|
|
242
|
+
address?: string;
|
|
243
|
+
};
|
|
244
|
+
/** Purpose of the data transfer */
|
|
245
|
+
purpose: string;
|
|
246
|
+
/** Safeguards in place to protect the data */
|
|
247
|
+
safeguards: string[];
|
|
248
|
+
/** Risk assessment summary */
|
|
249
|
+
riskAssessment: string;
|
|
250
|
+
/** Risk level of the transfer */
|
|
251
|
+
riskLevel: 'low' | 'medium' | 'high';
|
|
252
|
+
/** NDPC approval details (required for some transfer mechanisms) */
|
|
253
|
+
ndpcApproval?: {
|
|
254
|
+
required: boolean;
|
|
255
|
+
applied: boolean;
|
|
256
|
+
approved?: boolean;
|
|
257
|
+
referenceNumber?: string;
|
|
258
|
+
appliedAt?: number;
|
|
259
|
+
approvedAt?: number;
|
|
260
|
+
};
|
|
261
|
+
/** Whether a Transfer Impact Assessment has been conducted */
|
|
262
|
+
tiaCompleted: boolean;
|
|
263
|
+
/** Reference to the TIA document */
|
|
264
|
+
tiaReference?: string;
|
|
265
|
+
/** Frequency of the transfer */
|
|
266
|
+
frequency: 'one_time' | 'periodic' | 'continuous';
|
|
267
|
+
/** Start date of the transfer */
|
|
268
|
+
startDate: number;
|
|
269
|
+
/** End date of the transfer (if applicable) */
|
|
270
|
+
endDate?: number;
|
|
271
|
+
/** Status of the transfer */
|
|
272
|
+
status: 'active' | 'suspended' | 'terminated' | 'pending_approval';
|
|
273
|
+
/** Timestamp when the record was created */
|
|
274
|
+
createdAt: number;
|
|
275
|
+
/** Timestamp when the record was last updated */
|
|
276
|
+
updatedAt: number;
|
|
277
|
+
/** Next review date */
|
|
278
|
+
reviewDate?: number;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
declare interface CrossBorderTransferManagerClassNames {
|
|
282
|
+
root?: string;
|
|
283
|
+
header?: string;
|
|
284
|
+
title?: string;
|
|
285
|
+
summary?: string;
|
|
286
|
+
summaryCard?: string;
|
|
287
|
+
transferList?: string;
|
|
288
|
+
transferItem?: string;
|
|
289
|
+
form?: string;
|
|
290
|
+
input?: string;
|
|
291
|
+
select?: string;
|
|
292
|
+
submitButton?: string;
|
|
293
|
+
/** Alias for submitButton */
|
|
294
|
+
primaryButton?: string;
|
|
295
|
+
riskBadge?: string;
|
|
296
|
+
statusBadge?: string;
|
|
297
|
+
detailPanel?: string;
|
|
298
|
+
approvalStatus?: string;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/** A user-defined section added to the policy outside the generated ones. */
|
|
302
|
+
declare interface CustomSection {
|
|
303
|
+
id: string;
|
|
304
|
+
title: string;
|
|
305
|
+
content: string;
|
|
306
|
+
order: number;
|
|
307
|
+
required: false;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/** A logical category of personal data the organisation may collect. */
|
|
311
|
+
declare interface DataCategory {
|
|
312
|
+
/** Machine-readable identifier. */
|
|
313
|
+
id: string;
|
|
314
|
+
/** Human-readable label shown in the wizard. */
|
|
315
|
+
label: string;
|
|
316
|
+
/** Grouping for display and compliance checks. */
|
|
317
|
+
group: 'identity' | 'financial' | 'behavioral' | 'sensitive' | 'children';
|
|
318
|
+
/** Specific data points within this category. */
|
|
319
|
+
dataPoints: string[];
|
|
320
|
+
/** Whether this category is currently selected by the user. */
|
|
321
|
+
selected: boolean;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Data Protection Impact Assessment types aligned with NDPA 2023 Sections 38-39
|
|
326
|
+
* A DPIA is required when processing is likely to result in high risk to data subjects
|
|
327
|
+
*/
|
|
328
|
+
/**
|
|
329
|
+
* Represents a question in the DPIA questionnaire
|
|
330
|
+
*/
|
|
331
|
+
declare interface DPIAQuestion {
|
|
332
|
+
/** Unique identifier for the question */
|
|
333
|
+
id: string;
|
|
334
|
+
/** The text of the question */
|
|
335
|
+
text: string;
|
|
336
|
+
/** Additional guidance for answering the question */
|
|
337
|
+
guidance?: string;
|
|
338
|
+
/** Type of input required for the answer */
|
|
339
|
+
type: 'text' | 'textarea' | 'select' | 'radio' | 'checkbox' | 'scale';
|
|
340
|
+
/** Options for select, radio, or checkbox questions */
|
|
341
|
+
options?: Array<{
|
|
342
|
+
value: string;
|
|
343
|
+
label: string;
|
|
344
|
+
riskLevel?: 'low' | 'medium' | 'high';
|
|
345
|
+
}>;
|
|
346
|
+
/** For scale questions, the minimum value */
|
|
347
|
+
minValue?: number;
|
|
348
|
+
/** For scale questions, the maximum value */
|
|
349
|
+
maxValue?: number;
|
|
350
|
+
/** For scale questions, labels for the scale points */
|
|
351
|
+
scaleLabels?: Record<number, string>;
|
|
352
|
+
/** Whether the question is required */
|
|
353
|
+
required: boolean;
|
|
354
|
+
/** Risk level associated with this question */
|
|
355
|
+
riskLevel?: 'low' | 'medium' | 'high';
|
|
356
|
+
/** Whether this question triggers additional questions based on the answer */
|
|
357
|
+
hasDependentQuestions?: boolean;
|
|
358
|
+
/** Conditions that determine when this question should be shown */
|
|
359
|
+
showWhen?: Array<{
|
|
360
|
+
questionId: string;
|
|
361
|
+
operator: 'equals' | 'contains' | 'greaterThan' | 'lessThan';
|
|
362
|
+
value: string | number | boolean;
|
|
363
|
+
}>;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
declare interface DPIAQuestionnaireClassNames {
|
|
367
|
+
/** Outermost wrapper */
|
|
368
|
+
root?: string;
|
|
369
|
+
/** Header area containing progress indicator */
|
|
370
|
+
header?: string;
|
|
371
|
+
/** Section title */
|
|
372
|
+
title?: string;
|
|
373
|
+
/** Section container */
|
|
374
|
+
section?: string;
|
|
375
|
+
/** Section title heading */
|
|
376
|
+
sectionTitle?: string;
|
|
377
|
+
/** Individual question wrapper */
|
|
378
|
+
question?: string;
|
|
379
|
+
/** Question label text */
|
|
380
|
+
questionText?: string;
|
|
381
|
+
/** Guidance / help text below a question */
|
|
382
|
+
guidance?: string;
|
|
383
|
+
/** Text / textarea / select inputs */
|
|
384
|
+
input?: string;
|
|
385
|
+
/** Radio option group container */
|
|
386
|
+
radioGroup?: string;
|
|
387
|
+
/** Individual radio option row */
|
|
388
|
+
radioOption?: string;
|
|
389
|
+
/** Navigation button container */
|
|
390
|
+
navigation?: string;
|
|
391
|
+
/** Next / submit button */
|
|
392
|
+
nextButton?: string;
|
|
393
|
+
/** Previous button */
|
|
394
|
+
prevButton?: string;
|
|
395
|
+
/** Alias for nextButton */
|
|
396
|
+
primaryButton?: string;
|
|
397
|
+
/** Alias for prevButton */
|
|
398
|
+
secondaryButton?: string;
|
|
399
|
+
/** Progress bar wrapper */
|
|
400
|
+
progressBar?: string;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Represents a section in the DPIA questionnaire
|
|
405
|
+
*/
|
|
406
|
+
declare interface DPIASection {
|
|
407
|
+
/** Unique identifier for the section */
|
|
408
|
+
id: string;
|
|
409
|
+
/** Title of the section */
|
|
410
|
+
title: string;
|
|
411
|
+
/** Description of the section */
|
|
412
|
+
description?: string;
|
|
413
|
+
/** Questions in this section */
|
|
414
|
+
questions: DPIAQuestion[];
|
|
415
|
+
/** Order of the section in the questionnaire */
|
|
416
|
+
order: number;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Represents the data submitted by the DSR request form.
|
|
421
|
+
*/
|
|
422
|
+
declare interface DSRFormSubmission {
|
|
423
|
+
/** The selected request type identifier */
|
|
424
|
+
requestType: string;
|
|
425
|
+
/** Data subject personal information */
|
|
426
|
+
dataSubject: {
|
|
427
|
+
fullName: string;
|
|
428
|
+
email: string;
|
|
429
|
+
phone?: string;
|
|
430
|
+
identifierType: string;
|
|
431
|
+
identifierValue: string;
|
|
432
|
+
};
|
|
433
|
+
/** Additional information provided for the selected request type */
|
|
434
|
+
additionalInfo?: Record<string, string | number | boolean | null>;
|
|
435
|
+
/** Timestamp (ms) when the form was submitted */
|
|
436
|
+
submittedAt: number;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
declare interface DSRRequestFormClassNames {
|
|
440
|
+
root?: string;
|
|
441
|
+
title?: string;
|
|
442
|
+
description?: string;
|
|
443
|
+
form?: string;
|
|
444
|
+
fieldGroup?: string;
|
|
445
|
+
label?: string;
|
|
446
|
+
input?: string;
|
|
447
|
+
select?: string;
|
|
448
|
+
textarea?: string;
|
|
449
|
+
submitButton?: string;
|
|
450
|
+
/** Alias for submitButton */
|
|
451
|
+
primaryButton?: string;
|
|
452
|
+
successMessage?: string;
|
|
453
|
+
/** Custom class applied when isSubmitting is true (e.g. a loading overlay) */
|
|
454
|
+
loadingOverlay?: string;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Policy engine types for the adaptive privacy policy generator.
|
|
459
|
+
* These types power the wizard-driven policy builder, compliance checker,
|
|
460
|
+
* and export functionality — all aligned with the NDPA 2023.
|
|
461
|
+
*/
|
|
462
|
+
|
|
463
|
+
/** Industry verticals with sector-specific compliance requirements. */
|
|
464
|
+
declare type Industry = 'fintech' | 'healthcare' | 'ecommerce' | 'saas' | 'education' | 'government' | 'other';
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Lawful Basis types aligned with NDPA 2023 Part III (Sections 24-28)
|
|
468
|
+
* Every processing activity must have a documented lawful basis
|
|
469
|
+
*/
|
|
470
|
+
/**
|
|
471
|
+
* The six lawful bases for processing personal data per NDPA Section 25(1)
|
|
472
|
+
*/
|
|
473
|
+
declare type LawfulBasis = 'consent' | 'contract' | 'legal_obligation' | 'vital_interests' | 'public_interest' | 'legitimate_interests';
|
|
474
|
+
|
|
475
|
+
declare interface LawfulBasisTrackerClassNames {
|
|
476
|
+
root?: string;
|
|
477
|
+
header?: string;
|
|
478
|
+
title?: string;
|
|
479
|
+
summary?: string;
|
|
480
|
+
summaryCard?: string;
|
|
481
|
+
table?: string;
|
|
482
|
+
tableHeader?: string;
|
|
483
|
+
tableRow?: string;
|
|
484
|
+
form?: string;
|
|
485
|
+
input?: string;
|
|
486
|
+
select?: string;
|
|
487
|
+
submitButton?: string;
|
|
488
|
+
/** Alias for submitButton */
|
|
489
|
+
primaryButton?: string;
|
|
490
|
+
statusBadge?: string;
|
|
491
|
+
complianceScore?: string;
|
|
492
|
+
gapAlert?: string;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* Lawful basis for processing personal data per NDPA Section 25(1)
|
|
497
|
+
*/
|
|
498
|
+
declare type LawfulBasisType = 'consent' | 'contract' | 'legal_obligation' | 'vital_interests' | 'public_interest' | 'legitimate_interests';
|
|
499
|
+
|
|
500
|
+
export declare const NDPRBreachReport: React__default.FC<NDPRBreachReportProps>;
|
|
501
|
+
|
|
502
|
+
export declare interface NDPRBreachReportProps {
|
|
503
|
+
categories?: BreachCategory[];
|
|
504
|
+
adapter?: StorageAdapter<BreachFormSubmission>;
|
|
505
|
+
classNames?: BreachReportFormClassNames;
|
|
506
|
+
unstyled?: boolean;
|
|
507
|
+
onSubmit?: (data: BreachFormSubmission) => void;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Preset wrapper for NDPRDashboard.
|
|
512
|
+
*
|
|
513
|
+
* Accepts raw ComplianceInput, computes the report via getComplianceScore(),
|
|
514
|
+
* and delegates rendering to the NDPRDashboard component.
|
|
515
|
+
*/
|
|
516
|
+
export declare const NDPRComplianceDashboard: React__default.FC<NDPRDashboardPresetProps>;
|
|
517
|
+
|
|
518
|
+
export declare const NDPRConsent: React__default.FC<NDPRConsentProps>;
|
|
519
|
+
|
|
520
|
+
export declare interface NDPRConsentProps {
|
|
521
|
+
extraOptions?: ConsentOption[];
|
|
522
|
+
options?: ConsentOption[];
|
|
523
|
+
adapter?: StorageAdapter<ConsentSettings>;
|
|
524
|
+
position?: 'top' | 'bottom' | 'center' | 'inline';
|
|
525
|
+
classNames?: ConsentBannerClassNames;
|
|
526
|
+
unstyled?: boolean;
|
|
527
|
+
onSave?: (settings: ConsentSettings) => void;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
export declare const NDPRCrossBorder: React__default.FC<NDPRCrossBorderProps>;
|
|
531
|
+
|
|
532
|
+
export declare interface NDPRCrossBorderProps {
|
|
533
|
+
initialTransfers?: CrossBorderTransfer[];
|
|
534
|
+
adapter?: StorageAdapter<CrossBorderTransfer[]>;
|
|
535
|
+
classNames?: CrossBorderTransferManagerClassNames;
|
|
536
|
+
unstyled?: boolean;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
declare interface NDPRDashboardClassNames {
|
|
540
|
+
root?: string;
|
|
541
|
+
header?: string;
|
|
542
|
+
scoreCircle?: string;
|
|
543
|
+
scoreValue?: string;
|
|
544
|
+
ratingBadge?: string;
|
|
545
|
+
modulesGrid?: string;
|
|
546
|
+
moduleCard?: string;
|
|
547
|
+
moduleTitle?: string;
|
|
548
|
+
moduleScore?: string;
|
|
549
|
+
moduleGaps?: string;
|
|
550
|
+
recommendationsSection?: string;
|
|
551
|
+
recommendationItem?: string;
|
|
552
|
+
recommendationPriority?: string;
|
|
553
|
+
recommendationTitle?: string;
|
|
554
|
+
primaryButton?: string;
|
|
555
|
+
secondaryButton?: string;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
export declare interface NDPRDashboardPresetProps {
|
|
559
|
+
/** Raw compliance input — the preset calls getComplianceScore() internally */
|
|
560
|
+
input: ComplianceInput;
|
|
561
|
+
/** Dashboard heading. Defaults to "NDPA Compliance Dashboard" */
|
|
562
|
+
title?: string;
|
|
563
|
+
/** Show/hide the recommendations section. Defaults to true */
|
|
564
|
+
showRecommendations?: boolean;
|
|
565
|
+
/** Maximum number of recommendations to render. Defaults to 5 */
|
|
566
|
+
maxRecommendations?: number;
|
|
567
|
+
/** Per-section class name overrides */
|
|
568
|
+
classNames?: NDPRDashboardClassNames;
|
|
569
|
+
/** When true, strips all default classes so consumers can style from scratch */
|
|
570
|
+
unstyled?: boolean;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
export declare const NDPRDPIA: React__default.FC<NDPRDPIAProps>;
|
|
574
|
+
|
|
575
|
+
export declare interface NDPRDPIAProps {
|
|
576
|
+
sections?: DPIASection[];
|
|
577
|
+
adapter?: StorageAdapter<Record<string, any>>;
|
|
578
|
+
classNames?: DPIAQuestionnaireClassNames;
|
|
579
|
+
unstyled?: boolean;
|
|
580
|
+
onComplete?: (answers: Record<string, any>) => void;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
export declare const NDPRLawfulBasis: React__default.FC<NDPRLawfulBasisProps>;
|
|
584
|
+
|
|
585
|
+
export declare interface NDPRLawfulBasisProps {
|
|
586
|
+
initialActivities?: ProcessingActivity[];
|
|
587
|
+
adapter?: StorageAdapter<ProcessingActivity[]>;
|
|
588
|
+
classNames?: LawfulBasisTrackerClassNames;
|
|
589
|
+
unstyled?: boolean;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
export declare const NDPRPrivacyPolicy: React__default.FC<NDPRPrivacyPolicyProps>;
|
|
593
|
+
|
|
594
|
+
export declare interface NDPRPrivacyPolicyProps {
|
|
595
|
+
adapter?: StorageAdapter<PolicyDraft>;
|
|
596
|
+
onComplete?: (policy: PrivacyPolicy) => void;
|
|
597
|
+
classNames?: Record<string, string>;
|
|
598
|
+
unstyled?: boolean;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
export declare const NDPRROPA: React__default.FC<NDPRROPAProps>;
|
|
602
|
+
|
|
603
|
+
export declare interface NDPRROPAProps {
|
|
604
|
+
initialData?: RecordOfProcessingActivities;
|
|
605
|
+
adapter?: StorageAdapter<RecordOfProcessingActivities>;
|
|
606
|
+
classNames?: ROPAManagerClassNames;
|
|
607
|
+
unstyled?: boolean;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
export declare const NDPRSubjectRights: React__default.FC<NDPRSubjectRightsProps>;
|
|
611
|
+
|
|
612
|
+
export declare interface NDPRSubjectRightsProps {
|
|
613
|
+
requestTypes?: RequestType[];
|
|
614
|
+
adapter?: StorageAdapter<DSRFormSubmission>;
|
|
615
|
+
classNames?: DSRRequestFormClassNames;
|
|
616
|
+
unstyled?: boolean;
|
|
617
|
+
onSubmit?: (data: DSRFormSubmission) => void;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
/**
|
|
621
|
+
* Represents organization information for a privacy policy
|
|
622
|
+
*/
|
|
623
|
+
declare interface OrganizationInfo {
|
|
624
|
+
/** Name of the organization */
|
|
625
|
+
name: string;
|
|
626
|
+
/** Website URL of the organization */
|
|
627
|
+
website: string;
|
|
628
|
+
/** Contact email for privacy inquiries */
|
|
629
|
+
privacyEmail: string;
|
|
630
|
+
/** Physical address of the organization */
|
|
631
|
+
address?: string;
|
|
632
|
+
/** Phone number for privacy inquiries */
|
|
633
|
+
privacyPhone?: string;
|
|
634
|
+
/** Name of the Data Protection Officer */
|
|
635
|
+
dpoName?: string;
|
|
636
|
+
/** Email of the Data Protection Officer */
|
|
637
|
+
dpoEmail?: string;
|
|
638
|
+
/** Industry or sector of the organization */
|
|
639
|
+
industry?: string;
|
|
640
|
+
/** NDPC registration number (if registered) */
|
|
641
|
+
ndpcRegistrationNumber?: string;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
/** Organisation size tiers — affects complexity of generated language. */
|
|
645
|
+
declare type OrgSize = 'startup' | 'midsize' | 'enterprise';
|
|
646
|
+
|
|
647
|
+
/** Represents an in-progress policy being built in the wizard. */
|
|
648
|
+
declare interface PolicyDraft {
|
|
649
|
+
/** Unique identifier for the draft. */
|
|
650
|
+
id: string;
|
|
651
|
+
/** The template context driving section generation. */
|
|
652
|
+
templateContext: TemplateContext;
|
|
653
|
+
/** Custom sections added by the user. */
|
|
654
|
+
customSections: CustomSection[];
|
|
655
|
+
/** Per-section content overrides keyed by section id. */
|
|
656
|
+
sectionOverrides: Record<string, string>;
|
|
657
|
+
/** Ordered list of section ids defining the final order. */
|
|
658
|
+
sectionOrder: string[];
|
|
659
|
+
/** Current wizard step (0-indexed). */
|
|
660
|
+
currentStep: number;
|
|
661
|
+
/** Timestamp of the last save. */
|
|
662
|
+
lastSavedAt: number;
|
|
663
|
+
/** The draft is always in "draft" status until finalised. */
|
|
664
|
+
status: 'draft';
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* Privacy policy types aligned with NDPA 2023
|
|
669
|
+
* Privacy policies must clearly inform data subjects of their rights under the NDPA
|
|
670
|
+
*/
|
|
671
|
+
/**
|
|
672
|
+
* Represents a section in a privacy policy
|
|
673
|
+
*/
|
|
674
|
+
declare interface PolicySection {
|
|
675
|
+
/** Unique identifier for the section */
|
|
676
|
+
id: string;
|
|
677
|
+
/** Title of the section */
|
|
678
|
+
title: string;
|
|
679
|
+
/** Description of the section */
|
|
680
|
+
description?: string;
|
|
681
|
+
/** Order of the section in the policy */
|
|
682
|
+
order?: number;
|
|
683
|
+
/** Whether the section is required by NDPA */
|
|
684
|
+
required: boolean;
|
|
685
|
+
/** Template text for the section */
|
|
686
|
+
template: string;
|
|
687
|
+
/**
|
|
688
|
+
* Default content for the section (legacy field)
|
|
689
|
+
* @deprecated Use template instead
|
|
690
|
+
*/
|
|
691
|
+
defaultContent?: string;
|
|
692
|
+
/**
|
|
693
|
+
* Custom content for the section (overrides default content)
|
|
694
|
+
* @deprecated Use template instead
|
|
695
|
+
*/
|
|
696
|
+
customContent?: string;
|
|
697
|
+
/** Whether the section is included in the policy */
|
|
698
|
+
included: boolean;
|
|
699
|
+
/** Variables that can be used in the section content */
|
|
700
|
+
variables?: string[];
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/**
|
|
704
|
+
* Represents a generated privacy policy
|
|
705
|
+
*/
|
|
706
|
+
declare interface PrivacyPolicy {
|
|
707
|
+
/** Unique identifier for the policy */
|
|
708
|
+
id: string;
|
|
709
|
+
/** Title of the policy */
|
|
710
|
+
title: string;
|
|
711
|
+
/** Template used to generate the policy */
|
|
712
|
+
templateId: string;
|
|
713
|
+
/** Organization information */
|
|
714
|
+
organizationInfo: OrganizationInfo;
|
|
715
|
+
/** Sections of the policy */
|
|
716
|
+
sections: PolicySection[];
|
|
717
|
+
/** Values for the variables used in the policy */
|
|
718
|
+
variableValues: Record<string, string>;
|
|
719
|
+
/** Effective date of the policy */
|
|
720
|
+
effectiveDate: number;
|
|
721
|
+
/** Last updated date of the policy */
|
|
722
|
+
lastUpdated: number;
|
|
723
|
+
/** Version of the policy */
|
|
724
|
+
version: string;
|
|
725
|
+
/**
|
|
726
|
+
* Applicable legal frameworks
|
|
727
|
+
*/
|
|
728
|
+
applicableFrameworks?: ('ndpa' | 'ndpr' | 'gdpr' | 'ccpa')[];
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
/**
|
|
732
|
+
* Represents a processing activity and its lawful basis
|
|
733
|
+
*/
|
|
734
|
+
declare interface ProcessingActivity {
|
|
735
|
+
/** Unique identifier */
|
|
736
|
+
id: string;
|
|
737
|
+
/** Name of the processing activity */
|
|
738
|
+
name: string;
|
|
739
|
+
/** Description of what processing is performed */
|
|
740
|
+
description: string;
|
|
741
|
+
/** The lawful basis for this processing activity */
|
|
742
|
+
lawfulBasis: LawfulBasis;
|
|
743
|
+
/** Justification for why this lawful basis applies */
|
|
744
|
+
lawfulBasisJustification: string;
|
|
745
|
+
/** Categories of personal data being processed */
|
|
746
|
+
dataCategories: string[];
|
|
747
|
+
/** Whether sensitive personal data is involved */
|
|
748
|
+
involvesSensitiveData: boolean;
|
|
749
|
+
/** Condition for processing sensitive data (required if involvesSensitiveData is true) */
|
|
750
|
+
sensitiveDataCondition?: SensitiveDataCondition;
|
|
751
|
+
/** Categories of data subjects */
|
|
752
|
+
dataSubjectCategories: string[];
|
|
753
|
+
/** Purposes of the processing */
|
|
754
|
+
purposes: string[];
|
|
755
|
+
/** Data retention period */
|
|
756
|
+
retentionPeriod: string;
|
|
757
|
+
/** Justification for the retention period */
|
|
758
|
+
retentionJustification?: string;
|
|
759
|
+
/** Recipients or categories of recipients */
|
|
760
|
+
recipients?: string[];
|
|
761
|
+
/** Whether data is transferred outside Nigeria */
|
|
762
|
+
crossBorderTransfer: boolean;
|
|
763
|
+
/** Timestamp when the record was created */
|
|
764
|
+
createdAt: number;
|
|
765
|
+
/** Timestamp when the record was last updated */
|
|
766
|
+
updatedAt: number;
|
|
767
|
+
/** Next review date */
|
|
768
|
+
reviewDate?: number;
|
|
769
|
+
/** Status of the processing activity */
|
|
770
|
+
status: 'active' | 'inactive' | 'under_review' | 'archived';
|
|
771
|
+
/** DPO approval details */
|
|
772
|
+
dpoApproval?: {
|
|
773
|
+
approved: boolean;
|
|
774
|
+
approvedBy: string;
|
|
775
|
+
approvedAt: number;
|
|
776
|
+
notes?: string;
|
|
777
|
+
};
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
/** Lawful processing purposes recognised under the NDPA. */
|
|
781
|
+
declare type ProcessingPurpose = 'service_delivery' | 'marketing' | 'analytics' | 'research' | 'legal_compliance' | 'fraud_prevention';
|
|
782
|
+
|
|
783
|
+
/**
|
|
784
|
+
* Record of Processing Activities (ROPA) types aligned with NDPA 2023
|
|
785
|
+
* Data controllers must maintain comprehensive records of all processing activities
|
|
786
|
+
*/
|
|
787
|
+
|
|
788
|
+
/**
|
|
789
|
+
* Represents a single processing record in the ROPA
|
|
790
|
+
*/
|
|
791
|
+
declare interface ProcessingRecord {
|
|
792
|
+
/** Unique identifier */
|
|
793
|
+
id: string;
|
|
794
|
+
/** Name of the processing activity */
|
|
795
|
+
name: string;
|
|
796
|
+
/** Detailed description of the processing */
|
|
797
|
+
description: string;
|
|
798
|
+
/** Data controller details */
|
|
799
|
+
controllerDetails: {
|
|
800
|
+
name: string;
|
|
801
|
+
contact: string;
|
|
802
|
+
address: string;
|
|
803
|
+
registrationNumber?: string;
|
|
804
|
+
dpoContact?: string;
|
|
805
|
+
};
|
|
806
|
+
/** Joint controller details (if applicable) */
|
|
807
|
+
jointControllerDetails?: {
|
|
808
|
+
name: string;
|
|
809
|
+
contact: string;
|
|
810
|
+
address: string;
|
|
811
|
+
responsibilities: string;
|
|
812
|
+
};
|
|
813
|
+
/** Data processor details (if processing is outsourced) */
|
|
814
|
+
processorDetails?: {
|
|
815
|
+
name: string;
|
|
816
|
+
contact: string;
|
|
817
|
+
address: string;
|
|
818
|
+
contractReference?: string;
|
|
819
|
+
};
|
|
820
|
+
/** Lawful basis for the processing */
|
|
821
|
+
lawfulBasis: LawfulBasis;
|
|
822
|
+
/** Justification for the chosen lawful basis */
|
|
823
|
+
lawfulBasisJustification: string;
|
|
824
|
+
/** Purposes of the processing */
|
|
825
|
+
purposes: string[];
|
|
826
|
+
/** Categories of personal data processed */
|
|
827
|
+
dataCategories: string[];
|
|
828
|
+
/** Categories of sensitive personal data (if any) */
|
|
829
|
+
sensitiveDataCategories?: string[];
|
|
830
|
+
/** Categories of data subjects */
|
|
831
|
+
dataSubjectCategories: string[];
|
|
832
|
+
/** Recipients or categories of recipients */
|
|
833
|
+
recipients: string[];
|
|
834
|
+
/** Cross-border transfer details */
|
|
835
|
+
crossBorderTransfers?: Array<{
|
|
836
|
+
destinationCountry: string;
|
|
837
|
+
countryCode?: string;
|
|
838
|
+
safeguards: string;
|
|
839
|
+
transferMechanism: string;
|
|
840
|
+
}>;
|
|
841
|
+
/** Data retention period */
|
|
842
|
+
retentionPeriod: string;
|
|
843
|
+
/** Justification for the retention period */
|
|
844
|
+
retentionJustification?: string;
|
|
845
|
+
/** Technical and organizational security measures */
|
|
846
|
+
securityMeasures: string[];
|
|
847
|
+
/** Data source (directly from data subject or from third party) */
|
|
848
|
+
dataSource: 'data_subject' | 'third_party' | 'public_source' | 'other';
|
|
849
|
+
/** Third-party source details (if dataSource is 'third_party') */
|
|
850
|
+
thirdPartySourceDetails?: string;
|
|
851
|
+
/** Whether a DPIA is required for this processing */
|
|
852
|
+
dpiaRequired: boolean;
|
|
853
|
+
/** Reference to the DPIA (if conducted) */
|
|
854
|
+
dpiaReference?: string;
|
|
855
|
+
/** Whether automated decision-making is involved */
|
|
856
|
+
automatedDecisionMaking: boolean;
|
|
857
|
+
/** Details of automated decision-making (if applicable) */
|
|
858
|
+
automatedDecisionMakingDetails?: string;
|
|
859
|
+
/** Status of the processing record */
|
|
860
|
+
status: 'active' | 'inactive' | 'archived';
|
|
861
|
+
/** Department or business unit responsible */
|
|
862
|
+
department?: string;
|
|
863
|
+
/** System or application used for processing */
|
|
864
|
+
systemsUsed?: string[];
|
|
865
|
+
/** Timestamp when the record was created */
|
|
866
|
+
createdAt: number;
|
|
867
|
+
/** Timestamp when the record was last updated */
|
|
868
|
+
updatedAt: number;
|
|
869
|
+
/** Timestamp when the record was last reviewed */
|
|
870
|
+
lastReviewedAt?: number;
|
|
871
|
+
/** Next review date */
|
|
872
|
+
nextReviewDate?: number;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
/**
|
|
876
|
+
* Represents a complete Record of Processing Activities
|
|
877
|
+
*/
|
|
878
|
+
declare interface RecordOfProcessingActivities {
|
|
879
|
+
/** Unique identifier */
|
|
880
|
+
id: string;
|
|
881
|
+
/** Organization name */
|
|
882
|
+
organizationName: string;
|
|
883
|
+
/** Organization contact information */
|
|
884
|
+
organizationContact: string;
|
|
885
|
+
/** Organization address */
|
|
886
|
+
organizationAddress: string;
|
|
887
|
+
/** Data Protection Officer details */
|
|
888
|
+
dpoDetails?: {
|
|
889
|
+
name: string;
|
|
890
|
+
email: string;
|
|
891
|
+
phone?: string;
|
|
892
|
+
};
|
|
893
|
+
/** NDPC registration number */
|
|
894
|
+
ndpcRegistrationNumber?: string;
|
|
895
|
+
/** All processing records */
|
|
896
|
+
records: ProcessingRecord[];
|
|
897
|
+
/** Timestamp when the ROPA was last updated */
|
|
898
|
+
lastUpdated: number;
|
|
899
|
+
/** Version of the ROPA */
|
|
900
|
+
version: string;
|
|
901
|
+
/** Export format options */
|
|
902
|
+
exportFormats?: ('pdf' | 'csv' | 'json' | 'xlsx')[];
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
/**
|
|
906
|
+
* Represents a type of data subject request (detailed configuration)
|
|
907
|
+
*/
|
|
908
|
+
declare interface RequestType {
|
|
909
|
+
/** Unique identifier for the request type */
|
|
910
|
+
id: string;
|
|
911
|
+
/** Display name for the request type */
|
|
912
|
+
name: string;
|
|
913
|
+
/** Description of what this request type entails */
|
|
914
|
+
description: string;
|
|
915
|
+
/**
|
|
916
|
+
* NDPA section reference (e.g., "Section 30" for access requests)
|
|
917
|
+
*/
|
|
918
|
+
ndpaSection?: string;
|
|
919
|
+
/**
|
|
920
|
+
* Estimated time to fulfill this type of request (in days)
|
|
921
|
+
* NDPA requires response within 30 days
|
|
922
|
+
*/
|
|
923
|
+
estimatedCompletionTime: number;
|
|
924
|
+
/** Whether additional information is required for this request type */
|
|
925
|
+
requiresAdditionalInfo: boolean;
|
|
926
|
+
/** Custom fields required for this request type */
|
|
927
|
+
additionalFields?: Array<{
|
|
928
|
+
id: string;
|
|
929
|
+
label: string;
|
|
930
|
+
type: 'text' | 'textarea' | 'select' | 'checkbox' | 'file';
|
|
931
|
+
options?: string[];
|
|
932
|
+
required: boolean;
|
|
933
|
+
placeholder?: string;
|
|
934
|
+
}>;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
declare interface ROPAManagerClassNames {
|
|
938
|
+
root?: string;
|
|
939
|
+
header?: string;
|
|
940
|
+
title?: string;
|
|
941
|
+
orgInfo?: string;
|
|
942
|
+
summary?: string;
|
|
943
|
+
summaryCard?: string;
|
|
944
|
+
table?: string;
|
|
945
|
+
tableHeader?: string;
|
|
946
|
+
tableRow?: string;
|
|
947
|
+
form?: string;
|
|
948
|
+
input?: string;
|
|
949
|
+
select?: string;
|
|
950
|
+
submitButton?: string;
|
|
951
|
+
/** Alias for submitButton */
|
|
952
|
+
primaryButton?: string;
|
|
953
|
+
statusBadge?: string;
|
|
954
|
+
exportButton?: string;
|
|
955
|
+
/** Alias for exportButton */
|
|
956
|
+
secondaryButton?: string;
|
|
957
|
+
complianceGap?: string;
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
/**
|
|
961
|
+
* Additional conditions required for processing sensitive personal data
|
|
962
|
+
* per NDPA Section 27
|
|
963
|
+
*/
|
|
964
|
+
declare type SensitiveDataCondition = 'explicit_consent' | 'employment_law' | 'vital_interests_incapable' | 'nonprofit_legitimate' | 'publicly_available' | 'legal_claims' | 'substantial_public_interest' | 'health_purposes' | 'public_health' | 'archiving_research';
|
|
965
|
+
|
|
966
|
+
declare interface StorageAdapter<T = unknown> {
|
|
967
|
+
/** Load persisted data. Called once on hook mount. */
|
|
968
|
+
load(): T | null | Promise<T | null>;
|
|
969
|
+
/** Persist data. Called on every state change. */
|
|
970
|
+
save(data: T): void | Promise<void>;
|
|
971
|
+
/** Clear persisted data. Called on reset. */
|
|
972
|
+
remove(): void | Promise<void>;
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
/** Full context used to generate an adaptive privacy policy. */
|
|
976
|
+
declare interface TemplateContext {
|
|
977
|
+
/** Organisation details, extended with industry and size. */
|
|
978
|
+
org: OrganizationInfo & {
|
|
979
|
+
industry: Industry;
|
|
980
|
+
orgSize: OrgSize;
|
|
981
|
+
country: string;
|
|
982
|
+
};
|
|
983
|
+
/** Data categories the organisation collects. */
|
|
984
|
+
dataCategories: DataCategory[];
|
|
985
|
+
/** Processing purposes relevant to the organisation. */
|
|
986
|
+
purposes: ProcessingPurpose[];
|
|
987
|
+
/** Whether the organisation processes children's data. */
|
|
988
|
+
hasChildrenData: boolean;
|
|
989
|
+
/** Whether the organisation processes sensitive/special-category data. */
|
|
990
|
+
hasSensitiveData: boolean;
|
|
991
|
+
/** Whether the organisation processes financial data. */
|
|
992
|
+
hasFinancialData: boolean;
|
|
993
|
+
/** Whether data is transferred outside Nigeria. */
|
|
994
|
+
hasCrossBorderTransfer: boolean;
|
|
995
|
+
/** Whether automated decision-making or profiling is used. */
|
|
996
|
+
hasAutomatedDecisions: boolean;
|
|
997
|
+
/** Third-party processors that receive personal data. */
|
|
998
|
+
thirdPartyProcessors: ThirdPartyProcessor[];
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
/** A third-party entity that processes data on behalf of the organisation. */
|
|
1002
|
+
declare interface ThirdPartyProcessor {
|
|
1003
|
+
/** Name of the third party. */
|
|
1004
|
+
name: string;
|
|
1005
|
+
/** Purpose of sharing data with this processor. */
|
|
1006
|
+
purpose: string;
|
|
1007
|
+
/** Country where the processor is located. */
|
|
1008
|
+
country: string;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
/**
|
|
1012
|
+
* Cross-Border Data Transfer types aligned with NDPA 2023 Part VI (Sections 41-45)
|
|
1013
|
+
* Personal data may only be transferred outside Nigeria under specific conditions
|
|
1014
|
+
*/
|
|
1015
|
+
/**
|
|
1016
|
+
* Transfer mechanisms recognized under the NDPA
|
|
1017
|
+
*/
|
|
1018
|
+
declare type TransferMechanism = 'adequacy_decision' | 'standard_clauses' | 'binding_corporate_rules' | 'ndpc_authorization' | 'explicit_consent' | 'contract_performance' | 'public_interest' | 'legal_claims' | 'vital_interests';
|
|
1019
|
+
|
|
1020
|
+
export { }
|