@greenarmor/ges-compliance-engine 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 greenarmor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+ export declare function createArticle25Controls(): Control[];
@@ -0,0 +1,36 @@
1
+ export function createArticle25Controls() {
2
+ return [
3
+ {
4
+ id: "GDPR-ART25-001",
5
+ name: "Data Protection by Design",
6
+ description: "Implement appropriate technical and organisational measures to integrate data protection principles into processing.",
7
+ category: "privacy-by-design",
8
+ framework: "GDPR",
9
+ article: "Article 25(1)",
10
+ status: "not-implemented",
11
+ severity: "critical",
12
+ implementation_guidance: "Conduct privacy impact assessments during design phase. Implement pseudonymisation by default. Minimise data processing in all components.",
13
+ checks: [
14
+ { id: "GDPR-ART25-001-C1", description: "Privacy impact assessment conducted", status: "not-implemented" },
15
+ { id: "GDPR-ART25-001-C2", description: "Pseudonymisation implemented where applicable", status: "not-implemented" },
16
+ { id: "GDPR-ART25-001-C3", description: "Data protection integrated into development lifecycle", status: "not-implemented" },
17
+ ],
18
+ },
19
+ {
20
+ id: "GDPR-ART25-002",
21
+ name: "Data Protection by Default",
22
+ description: "Only personal data necessary for each specific purpose is processed by default.",
23
+ category: "privacy-by-design",
24
+ framework: "GDPR",
25
+ article: "Article 25(2)",
26
+ status: "not-implemented",
27
+ severity: "critical",
28
+ implementation_guidance: "Configure default settings to process minimal data. Require explicit opt-in for additional data processing. Implement granular consent controls.",
29
+ checks: [
30
+ { id: "GDPR-ART25-002-C1", description: "Default settings minimise data processing", status: "not-implemented" },
31
+ { id: "GDPR-ART25-002-C2", description: "Explicit opt-in required for additional processing", status: "not-implemented" },
32
+ ],
33
+ },
34
+ ];
35
+ }
36
+ //# sourceMappingURL=article-25.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"article-25.js","sourceRoot":"","sources":["../src/article-25.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL;YACE,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,2BAA2B;YACjC,WAAW,EAAE,sHAAsH;YACnI,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,UAAU;YACpB,uBAAuB,EAAE,4IAA4I;YACrK,MAAM,EAAE;gBACN,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,qCAAqC,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBAC1G,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,+CAA+C,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBACpH,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,uDAAuD,EAAE,MAAM,EAAE,iBAAiB,EAAE;aAC7H;SACF;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,4BAA4B;YAClC,WAAW,EAAE,iFAAiF;YAC9F,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,UAAU;YACpB,uBAAuB,EAAE,kJAAkJ;YAC3K,MAAM,EAAE;gBACN,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,2CAA2C,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBAChH,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,oDAAoD,EAAE,MAAM,EAAE,iBAAiB,EAAE;aAC1H;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+ export declare function createArticle30Controls(): Control[];
@@ -0,0 +1,36 @@
1
+ export function createArticle30Controls() {
2
+ return [
3
+ {
4
+ id: "GDPR-ART30-001",
5
+ name: "Record of Processing Activities",
6
+ description: "Maintain a record of processing activities under the controller's responsibility.",
7
+ category: "documentation",
8
+ framework: "GDPR",
9
+ article: "Article 30(1)",
10
+ status: "not-implemented",
11
+ severity: "high",
12
+ implementation_guidance: "Create and maintain a processing activities register. Include: purposes, data categories, recipients, retention periods, and security measures.",
13
+ checks: [
14
+ { id: "GDPR-ART30-001-C1", description: "Processing activities register created", status: "not-implemented" },
15
+ { id: "GDPR-ART30-001-C2", description: "All required fields documented per Article 30", status: "not-implemented" },
16
+ { id: "GDPR-ART30-001-C3", description: "Register kept up to date", status: "not-implemented" },
17
+ ],
18
+ },
19
+ {
20
+ id: "GDPR-ART30-002",
21
+ name: "Processor Records",
22
+ description: "Processors must maintain records of all categories of processing carried out on behalf of controllers.",
23
+ category: "documentation",
24
+ framework: "GDPR",
25
+ article: "Article 30(2)",
26
+ status: "not-implemented",
27
+ severity: "high",
28
+ implementation_guidance: "If acting as a processor, maintain records of all processing categories. Include controller details, processing purposes, and data transfers.",
29
+ checks: [
30
+ { id: "GDPR-ART30-002-C1", description: "Processor processing records maintained", status: "not-implemented" },
31
+ { id: "GDPR-ART30-002-C2", description: "Data transfer documentation complete", status: "not-implemented" },
32
+ ],
33
+ },
34
+ ];
35
+ }
36
+ //# sourceMappingURL=article-30.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"article-30.js","sourceRoot":"","sources":["../src/article-30.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL;YACE,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,iCAAiC;YACvC,WAAW,EAAE,mFAAmF;YAChG,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,MAAM;YAChB,uBAAuB,EAAE,iJAAiJ;YAC1K,MAAM,EAAE;gBACN,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,wCAAwC,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBAC7G,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,+CAA+C,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBACpH,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,EAAE,iBAAiB,EAAE;aAChG;SACF;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,wGAAwG;YACrH,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,MAAM;YAChB,uBAAuB,EAAE,+IAA+I;YACxK,MAAM,EAAE;gBACN,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,yCAAyC,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBAC9G,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,sCAAsC,EAAE,MAAM,EAAE,iBAAiB,EAAE;aAC5G;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+ export declare function createArticle32Controls(): Control[];
@@ -0,0 +1,153 @@
1
+ export function createArticle32Controls() {
2
+ return [
3
+ {
4
+ id: "GDPR-ART32-001",
5
+ name: "Pseudonymisation",
6
+ description: "Implement pseudonymisation as a technical measure to protect personal data.",
7
+ category: "data-protection",
8
+ framework: "GDPR",
9
+ article: "Article 32(1)(a)",
10
+ status: "not-implemented",
11
+ severity: "critical",
12
+ implementation_guidance: "Replace identifying fields with pseudonymous identifiers. Maintain a separate, secured mapping table. Use tokenisation where applicable.",
13
+ checks: [
14
+ { id: "GDPR-ART32-001-C1", description: "Pseudonymisation strategy defined", status: "not-implemented" },
15
+ { id: "GDPR-ART32-001-C2", description: "Technical implementation of pseudonymisation in place", status: "not-implemented" },
16
+ { id: "GDPR-ART32-001-C3", description: "Mapping table secured with access controls", status: "not-implemented" },
17
+ ],
18
+ },
19
+ {
20
+ id: "GDPR-ART32-002",
21
+ name: "Encryption at Rest",
22
+ description: "Implement encryption of personal data at rest using approved algorithms.",
23
+ category: "encryption",
24
+ framework: "GDPR",
25
+ article: "Article 32(1)(a)",
26
+ status: "not-implemented",
27
+ severity: "critical",
28
+ implementation_guidance: "Use AES-256-GCM or ChaCha20-Poly1305 for data at rest. Encrypt databases, file storage, and backups. Manage keys via vault or KMS.",
29
+ checks: [
30
+ { id: "GDPR-ART32-002-C1", description: "Database encryption enabled", status: "not-implemented" },
31
+ { id: "GDPR-ART32-002-C2", description: "File storage encryption enabled", status: "not-implemented" },
32
+ { id: "GDPR-ART32-002-C3", description: "Backup encryption enabled", status: "not-implemented" },
33
+ { id: "GDPR-ART32-002-C4", description: "Key management via approved system (Vault/KMS)", status: "not-implemented" },
34
+ ],
35
+ },
36
+ {
37
+ id: "GDPR-ART32-003",
38
+ name: "Encryption in Transit",
39
+ description: "Ensure all personal data transmitted is encrypted using TLS 1.2 minimum.",
40
+ category: "encryption",
41
+ framework: "GDPR",
42
+ article: "Article 32(1)(a)",
43
+ status: "not-implemented",
44
+ severity: "critical",
45
+ implementation_guidance: "Enforce TLS 1.2 minimum, prefer TLS 1.3. Configure HSTS. Disable older protocols. Use strong cipher suites.",
46
+ checks: [
47
+ { id: "GDPR-ART32-003-C1", description: "TLS 1.2 minimum enforced on all endpoints", status: "not-implemented" },
48
+ { id: "GDPR-ART32-003-C2", description: "HSTS headers configured", status: "not-implemented" },
49
+ { id: "GDPR-ART32-003-C3", description: "Strong cipher suites only", status: "not-implemented" },
50
+ ],
51
+ },
52
+ {
53
+ id: "GDPR-ART32-004",
54
+ name: "Unique User Identification",
55
+ description: "Ensure unique identification of each user through secure authentication.",
56
+ category: "authentication",
57
+ framework: "GDPR",
58
+ article: "Article 32(1)(b)",
59
+ status: "not-implemented",
60
+ severity: "critical",
61
+ implementation_guidance: "Implement unique user IDs. Use Argon2id for password hashing. Support MFA and passkeys.",
62
+ checks: [
63
+ { id: "GDPR-ART32-004-C1", description: "Unique user identification implemented", status: "not-implemented" },
64
+ { id: "GDPR-ART32-004-C2", description: "Secure password hashing (Argon2id)", status: "not-implemented" },
65
+ { id: "GDPR-ART32-004-C3", description: "MFA support implemented", status: "not-implemented" },
66
+ ],
67
+ },
68
+ {
69
+ id: "GDPR-ART32-005",
70
+ name: "Automatic Session Timeout",
71
+ description: "Implement automatic session expiration after period of inactivity.",
72
+ category: "authentication",
73
+ framework: "GDPR",
74
+ article: "Article 32(1)(b)",
75
+ status: "not-implemented",
76
+ severity: "high",
77
+ implementation_guidance: "Set maximum session duration. Implement idle timeout (15-30 minutes). Require re-authentication for sensitive operations.",
78
+ checks: [
79
+ { id: "GDPR-ART32-005-C1", description: "Session timeout configured", status: "not-implemented" },
80
+ { id: "GDPR-ART32-005-C2", description: "Idle timeout implemented", status: "not-implemented" },
81
+ { id: "GDPR-ART32-005-C3", description: "Re-authentication for sensitive operations", status: "not-implemented" },
82
+ ],
83
+ },
84
+ {
85
+ id: "GDPR-ART32-006",
86
+ name: "Audit Logging",
87
+ description: "Maintain comprehensive audit logs of all access and processing activities.",
88
+ category: "audit",
89
+ framework: "GDPR",
90
+ article: "Article 32(1)(b)",
91
+ status: "not-implemented",
92
+ severity: "critical",
93
+ implementation_guidance: "Log all authentication, authorization, data access, exports, and admin actions. Never log passwords, tokens, or sensitive data. Ensure logs are immutable.",
94
+ checks: [
95
+ { id: "GDPR-ART32-006-C1", description: "Audit logging system implemented", status: "not-implemented" },
96
+ { id: "GDPR-ART32-006-C2", description: "Logs include required fields (userId, action, resource, timestamp, IP)", status: "not-implemented" },
97
+ { id: "GDPR-ART32-006-C3", description: "Logs are immutable (append-only)", status: "not-implemented" },
98
+ { id: "GDPR-ART32-006-C4", description: "Sensitive data is not logged", status: "not-implemented" },
99
+ ],
100
+ },
101
+ {
102
+ id: "GDPR-ART32-007",
103
+ name: "Integrity Controls",
104
+ description: "Implement measures to ensure ongoing integrity of personal data.",
105
+ category: "data-integrity",
106
+ framework: "GDPR",
107
+ article: "Article 32(1)(b)",
108
+ status: "not-implemented",
109
+ severity: "high",
110
+ implementation_guidance: "Use checksums or hashes for data integrity verification. Implement input validation. Use database constraints.",
111
+ checks: [
112
+ { id: "GDPR-ART32-007-C1", description: "Data integrity verification implemented", status: "not-implemented" },
113
+ { id: "GDPR-ART32-007-C2", description: "Input validation on all data entry points", status: "not-implemented" },
114
+ { id: "GDPR-ART32-007-C3", description: "Database constraints enforced", status: "not-implemented" },
115
+ ],
116
+ },
117
+ {
118
+ id: "GDPR-ART32-008",
119
+ name: "Backup and Recovery",
120
+ description: "Implement regular backup and recovery procedures for personal data.",
121
+ category: "backup",
122
+ framework: "GDPR",
123
+ article: "Article 32(1)(b)",
124
+ status: "not-implemented",
125
+ severity: "critical",
126
+ implementation_guidance: "Perform daily encrypted backups. Test restores weekly. Conduct monthly recovery tests. Document backup procedures.",
127
+ checks: [
128
+ { id: "GDPR-ART32-008-C1", description: "Daily backup schedule configured", status: "not-implemented" },
129
+ { id: "GDPR-ART32-008-C2", description: "Backups are encrypted", status: "not-implemented" },
130
+ { id: "GDPR-ART32-008-C3", description: "Weekly restore tests performed", status: "not-implemented" },
131
+ { id: "GDPR-ART32-008-C4", description: "Monthly recovery tests documented", status: "not-implemented" },
132
+ ],
133
+ },
134
+ {
135
+ id: "GDPR-ART32-009",
136
+ name: "Regular Security Testing",
137
+ description: "Conduct regular testing, assessment, and evaluation of security measures.",
138
+ category: "security-testing",
139
+ framework: "GDPR",
140
+ article: "Article 32(1)(d)",
141
+ status: "not-implemented",
142
+ severity: "critical",
143
+ implementation_guidance: "Run dependency scans (Trivy, Dependabot). Perform secret scanning (Gitleaks). Use SAST (Semgrep). Schedule penetration tests.",
144
+ checks: [
145
+ { id: "GDPR-ART32-009-C1", description: "Dependency scanning in CI/CD", status: "not-implemented" },
146
+ { id: "GDPR-ART32-009-C2", description: "Secret scanning in CI/CD", status: "not-implemented" },
147
+ { id: "GDPR-ART32-009-C3", description: "SAST analysis integrated", status: "not-implemented" },
148
+ { id: "GDPR-ART32-009-C4", description: "Penetration test schedule defined", status: "not-implemented" },
149
+ ],
150
+ },
151
+ ];
152
+ }
153
+ //# sourceMappingURL=article-32.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"article-32.js","sourceRoot":"","sources":["../src/article-32.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+ export declare function createArticle33Controls(): Control[];
@@ -0,0 +1,36 @@
1
+ export function createArticle33Controls() {
2
+ return [
3
+ {
4
+ id: "GDPR-ART33-001",
5
+ name: "Data Breach Notification to Authority",
6
+ description: "Notify the supervisory authority of a personal data breach within 72 hours.",
7
+ category: "incident-response",
8
+ framework: "GDPR",
9
+ article: "Article 33(1)",
10
+ status: "not-implemented",
11
+ severity: "critical",
12
+ implementation_guidance: "Create a breach notification procedure. Define escalation paths. Prepare notification templates. Maintain contact details for supervisory authorities.",
13
+ checks: [
14
+ { id: "GDPR-ART33-001-C1", description: "Breach notification procedure documented", status: "not-implemented" },
15
+ { id: "GDPR-ART33-001-C2", description: "72-hour notification timeline achievable", status: "not-implemented" },
16
+ { id: "GDPR-ART33-001-C3", description: "Supervisory authority contacts maintained", status: "not-implemented" },
17
+ ],
18
+ },
19
+ {
20
+ id: "GDPR-ART33-002",
21
+ name: "Breach Documentation",
22
+ description: "Document all data breaches including facts, effects, and remedial actions.",
23
+ category: "incident-response",
24
+ framework: "GDPR",
25
+ article: "Article 33(4)",
26
+ status: "not-implemented",
27
+ severity: "high",
28
+ implementation_guidance: "Maintain a breach register. Record: nature of breach, categories and number of data subjects, likely consequences, and measures taken.",
29
+ checks: [
30
+ { id: "GDPR-ART33-002-C1", description: "Breach register maintained", status: "not-implemented" },
31
+ { id: "GDPR-ART33-002-C2", description: "All required breach details documented", status: "not-implemented" },
32
+ ],
33
+ },
34
+ ];
35
+ }
36
+ //# sourceMappingURL=article-33.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"article-33.js","sourceRoot":"","sources":["../src/article-33.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL;YACE,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,uCAAuC;YAC7C,WAAW,EAAE,6EAA6E;YAC1F,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,UAAU;YACpB,uBAAuB,EAAE,wJAAwJ;YACjL,MAAM,EAAE;gBACN,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,0CAA0C,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBAC/G,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,0CAA0C,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBAC/G,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,2CAA2C,EAAE,MAAM,EAAE,iBAAiB,EAAE;aACjH;SACF;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,4EAA4E;YACzF,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,MAAM;YAChB,uBAAuB,EAAE,wIAAwI;YACjK,MAAM,EAAE;gBACN,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBACjG,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,wCAAwC,EAAE,MAAM,EAAE,iBAAiB,EAAE;aAC9G;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+ export declare function createArticle34Controls(): Control[];
@@ -0,0 +1,21 @@
1
+ export function createArticle34Controls() {
2
+ return [
3
+ {
4
+ id: "GDPR-ART34-001",
5
+ name: "Data Breach Communication to Data Subjects",
6
+ description: "Communicate personal data breaches to affected data subjects when likely to result in high risk.",
7
+ category: "incident-response",
8
+ framework: "GDPR",
9
+ article: "Article 34(1)",
10
+ status: "not-implemented",
11
+ severity: "critical",
12
+ implementation_guidance: "Prepare data subject notification templates. Define criteria for high-risk breaches. Establish communication channels.",
13
+ checks: [
14
+ { id: "GDPR-ART34-001-C1", description: "Data subject notification templates prepared", status: "not-implemented" },
15
+ { id: "GDPR-ART34-001-C2", description: "High-risk criteria defined", status: "not-implemented" },
16
+ { id: "GDPR-ART34-001-C3", description: "Communication channels established", status: "not-implemented" },
17
+ ],
18
+ },
19
+ ];
20
+ }
21
+ //# sourceMappingURL=article-34.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"article-34.js","sourceRoot":"","sources":["../src/article-34.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL;YACE,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,4CAA4C;YAClD,WAAW,EAAE,kGAAkG;YAC/G,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,iBAAiB;YACzB,QAAQ,EAAE,UAAU;YACpB,uBAAuB,EAAE,wHAAwH;YACjJ,MAAM,EAAE;gBACN,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,8CAA8C,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBACnH,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,EAAE,iBAAiB,EAAE;gBACjG,EAAE,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,oCAAoC,EAAE,MAAM,EAAE,iBAAiB,EAAE;aAC1G;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+ export declare function createArticle5Controls(): Control[];
@@ -0,0 +1,98 @@
1
+ export function createArticle5Controls() {
2
+ return [
3
+ {
4
+ id: "GDPR-ART5-001",
5
+ name: "Lawfulness, Fairness, and Transparency",
6
+ description: "Personal data must be processed lawfully, fairly, and in a transparent manner.",
7
+ category: "data-processing",
8
+ framework: "GDPR",
9
+ article: "Article 5(1)(a)",
10
+ status: "not-implemented",
11
+ severity: "critical",
12
+ implementation_guidance: "Implement a consent management system. Maintain a record of legal bases for each processing activity. Provide clear privacy notices.",
13
+ checks: [
14
+ { id: "GDPR-ART5-001-C1", description: "Legal basis documented for each processing activity", status: "not-implemented" },
15
+ { id: "GDPR-ART5-001-C2", description: "Privacy notice is clear and accessible", status: "not-implemented" },
16
+ { id: "GDPR-ART5-001-C3", description: "Consent mechanism implemented where required", status: "not-implemented" },
17
+ ],
18
+ },
19
+ {
20
+ id: "GDPR-ART5-002",
21
+ name: "Purpose Limitation",
22
+ description: "Personal data must be collected for specified, explicit, and legitimate purposes.",
23
+ category: "data-processing",
24
+ framework: "GDPR",
25
+ article: "Article 5(1)(b)",
26
+ status: "not-implemented",
27
+ severity: "critical",
28
+ implementation_guidance: "Document all purposes of data processing. Implement controls to prevent processing beyond declared purposes.",
29
+ checks: [
30
+ { id: "GDPR-ART5-002-C1", description: "Purpose of each data collection documented", status: "not-implemented" },
31
+ { id: "GDPR-ART5-002-C2", description: "Technical controls prevent unauthorized purpose deviation", status: "not-implemented" },
32
+ ],
33
+ },
34
+ {
35
+ id: "GDPR-ART5-003",
36
+ name: "Data Minimisation",
37
+ description: "Personal data must be adequate, relevant, and limited to what is necessary.",
38
+ category: "data-processing",
39
+ framework: "GDPR",
40
+ article: "Article 5(1)(c)",
41
+ status: "not-implemented",
42
+ severity: "high",
43
+ implementation_guidance: "Review data collection forms and APIs to ensure only necessary data is collected. Remove unused data fields.",
44
+ checks: [
45
+ { id: "GDPR-ART5-003-C1", description: "Data collection reviewed for minimisation", status: "not-implemented" },
46
+ { id: "GDPR-ART5-003-C2", description: "No unnecessary data fields in forms and APIs", status: "not-implemented" },
47
+ ],
48
+ },
49
+ {
50
+ id: "GDPR-ART5-004",
51
+ name: "Accuracy",
52
+ description: "Personal data must be accurate and, where necessary, kept up to date.",
53
+ category: "data-quality",
54
+ framework: "GDPR",
55
+ article: "Article 5(1)(d)",
56
+ status: "not-implemented",
57
+ severity: "high",
58
+ implementation_guidance: "Implement data validation on input. Provide user self-service for data updates. Schedule periodic data accuracy reviews.",
59
+ checks: [
60
+ { id: "GDPR-ART5-004-C1", description: "Input validation implemented for personal data", status: "not-implemented" },
61
+ { id: "GDPR-ART5-004-C2", description: "Users can update their own data", status: "not-implemented" },
62
+ ],
63
+ },
64
+ {
65
+ id: "GDPR-ART5-005",
66
+ name: "Storage Limitation",
67
+ description: "Personal data must be kept in identifiable form no longer than necessary.",
68
+ category: "data-retention",
69
+ framework: "GDPR",
70
+ article: "Article 5(1)(e)",
71
+ status: "not-implemented",
72
+ severity: "critical",
73
+ implementation_guidance: "Define retention periods per data category. Implement automated deletion or anonymisation. Document retention policies.",
74
+ checks: [
75
+ { id: "GDPR-ART5-005-C1", description: "Retention periods defined per data category", status: "not-implemented" },
76
+ { id: "GDPR-ART5-005-C2", description: "Automated deletion or anonymisation implemented", status: "not-implemented" },
77
+ { id: "GDPR-ART5-005-C3", description: "Retention policy documented", status: "not-implemented" },
78
+ ],
79
+ },
80
+ {
81
+ id: "GDPR-ART5-006",
82
+ name: "Integrity and Confidentiality",
83
+ description: "Personal data must be processed with appropriate security measures.",
84
+ category: "security",
85
+ framework: "GDPR",
86
+ article: "Article 5(1)(f)",
87
+ status: "not-implemented",
88
+ severity: "critical",
89
+ implementation_guidance: "Implement encryption at rest and in transit. Use access controls. Ensure data integrity checks.",
90
+ checks: [
91
+ { id: "GDPR-ART5-006-C1", description: "Encryption at rest configured", status: "not-implemented" },
92
+ { id: "GDPR-ART5-006-C2", description: "Encryption in transit enforced (TLS 1.2+)", status: "not-implemented" },
93
+ { id: "GDPR-ART5-006-C3", description: "Access controls implemented", status: "not-implemented" },
94
+ ],
95
+ },
96
+ ];
97
+ }
98
+ //# sourceMappingURL=article-5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"article-5.js","sourceRoot":"","sources":["../src/article-5.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+ export declare function createGDPRControls(): Control[];
3
+ export { createArticle5Controls } from "./article-5.js";
4
+ export { createArticle25Controls } from "./article-25.js";
5
+ export { createArticle30Controls } from "./article-30.js";
6
+ export { createArticle32Controls } from "./article-32.js";
7
+ export { createArticle33Controls } from "./article-33.js";
8
+ export { createArticle34Controls } from "./article-34.js";
9
+ export declare function evaluateControl(control: Control): Control;
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ import { createArticle5Controls } from "./article-5.js";
2
+ import { createArticle25Controls } from "./article-25.js";
3
+ import { createArticle30Controls } from "./article-30.js";
4
+ import { createArticle32Controls } from "./article-32.js";
5
+ import { createArticle33Controls } from "./article-33.js";
6
+ import { createArticle34Controls } from "./article-34.js";
7
+ export function createGDPRControls() {
8
+ return [
9
+ ...createArticle5Controls(),
10
+ ...createArticle25Controls(),
11
+ ...createArticle30Controls(),
12
+ ...createArticle32Controls(),
13
+ ...createArticle33Controls(),
14
+ ...createArticle34Controls(),
15
+ ];
16
+ }
17
+ export { createArticle5Controls } from "./article-5.js";
18
+ export { createArticle25Controls } from "./article-25.js";
19
+ export { createArticle30Controls } from "./article-30.js";
20
+ export { createArticle32Controls } from "./article-32.js";
21
+ export { createArticle33Controls } from "./article-33.js";
22
+ export { createArticle34Controls } from "./article-34.js";
23
+ export function evaluateControl(control) {
24
+ const totalChecks = control.checks.length;
25
+ const passedChecks = control.checks.filter(c => c.status === "pass").length;
26
+ if (passedChecks === totalChecks) {
27
+ return { ...control, status: "pass" };
28
+ }
29
+ if (passedChecks === 0) {
30
+ return { ...control, status: control.status === "not-implemented" ? "not-implemented" : "fail" };
31
+ }
32
+ return { ...control, status: "warning" };
33
+ }
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,GAAG,sBAAsB,EAAE;QAC3B,GAAG,uBAAuB,EAAE;QAC5B,GAAG,uBAAuB,EAAE;QAC5B,GAAG,uBAAuB,EAAE;QAC5B,GAAG,uBAAuB,EAAE;QAC5B,GAAG,uBAAuB,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAE5E,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnG,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC3C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@greenarmor/ges-compliance-engine",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "GESF Compliance Engine - GDPR controls, evaluation, and compliance checking",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "dependencies": {
15
+ "@greenarmor/ges-core": "0.1.0"
16
+ },
17
+ "devDependencies": {
18
+ "typescript": "^6.0.0",
19
+ "@types/node": "^22.0.0"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "clean": "rm -rf dist tsconfig.tsbuildinfo",
24
+ "test": "echo \"no tests yet\""
25
+ }
26
+ }
@@ -0,0 +1,37 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+
3
+ export function createArticle25Controls(): Control[] {
4
+ return [
5
+ {
6
+ id: "GDPR-ART25-001",
7
+ name: "Data Protection by Design",
8
+ description: "Implement appropriate technical and organisational measures to integrate data protection principles into processing.",
9
+ category: "privacy-by-design",
10
+ framework: "GDPR",
11
+ article: "Article 25(1)",
12
+ status: "not-implemented",
13
+ severity: "critical",
14
+ implementation_guidance: "Conduct privacy impact assessments during design phase. Implement pseudonymisation by default. Minimise data processing in all components.",
15
+ checks: [
16
+ { id: "GDPR-ART25-001-C1", description: "Privacy impact assessment conducted", status: "not-implemented" },
17
+ { id: "GDPR-ART25-001-C2", description: "Pseudonymisation implemented where applicable", status: "not-implemented" },
18
+ { id: "GDPR-ART25-001-C3", description: "Data protection integrated into development lifecycle", status: "not-implemented" },
19
+ ],
20
+ },
21
+ {
22
+ id: "GDPR-ART25-002",
23
+ name: "Data Protection by Default",
24
+ description: "Only personal data necessary for each specific purpose is processed by default.",
25
+ category: "privacy-by-design",
26
+ framework: "GDPR",
27
+ article: "Article 25(2)",
28
+ status: "not-implemented",
29
+ severity: "critical",
30
+ implementation_guidance: "Configure default settings to process minimal data. Require explicit opt-in for additional data processing. Implement granular consent controls.",
31
+ checks: [
32
+ { id: "GDPR-ART25-002-C1", description: "Default settings minimise data processing", status: "not-implemented" },
33
+ { id: "GDPR-ART25-002-C2", description: "Explicit opt-in required for additional processing", status: "not-implemented" },
34
+ ],
35
+ },
36
+ ];
37
+ }
@@ -0,0 +1,37 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+
3
+ export function createArticle30Controls(): Control[] {
4
+ return [
5
+ {
6
+ id: "GDPR-ART30-001",
7
+ name: "Record of Processing Activities",
8
+ description: "Maintain a record of processing activities under the controller's responsibility.",
9
+ category: "documentation",
10
+ framework: "GDPR",
11
+ article: "Article 30(1)",
12
+ status: "not-implemented",
13
+ severity: "high",
14
+ implementation_guidance: "Create and maintain a processing activities register. Include: purposes, data categories, recipients, retention periods, and security measures.",
15
+ checks: [
16
+ { id: "GDPR-ART30-001-C1", description: "Processing activities register created", status: "not-implemented" },
17
+ { id: "GDPR-ART30-001-C2", description: "All required fields documented per Article 30", status: "not-implemented" },
18
+ { id: "GDPR-ART30-001-C3", description: "Register kept up to date", status: "not-implemented" },
19
+ ],
20
+ },
21
+ {
22
+ id: "GDPR-ART30-002",
23
+ name: "Processor Records",
24
+ description: "Processors must maintain records of all categories of processing carried out on behalf of controllers.",
25
+ category: "documentation",
26
+ framework: "GDPR",
27
+ article: "Article 30(2)",
28
+ status: "not-implemented",
29
+ severity: "high",
30
+ implementation_guidance: "If acting as a processor, maintain records of all processing categories. Include controller details, processing purposes, and data transfers.",
31
+ checks: [
32
+ { id: "GDPR-ART30-002-C1", description: "Processor processing records maintained", status: "not-implemented" },
33
+ { id: "GDPR-ART30-002-C2", description: "Data transfer documentation complete", status: "not-implemented" },
34
+ ],
35
+ },
36
+ ];
37
+ }
@@ -0,0 +1,154 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+
3
+ export function createArticle32Controls(): Control[] {
4
+ return [
5
+ {
6
+ id: "GDPR-ART32-001",
7
+ name: "Pseudonymisation",
8
+ description: "Implement pseudonymisation as a technical measure to protect personal data.",
9
+ category: "data-protection",
10
+ framework: "GDPR",
11
+ article: "Article 32(1)(a)",
12
+ status: "not-implemented",
13
+ severity: "critical",
14
+ implementation_guidance: "Replace identifying fields with pseudonymous identifiers. Maintain a separate, secured mapping table. Use tokenisation where applicable.",
15
+ checks: [
16
+ { id: "GDPR-ART32-001-C1", description: "Pseudonymisation strategy defined", status: "not-implemented" },
17
+ { id: "GDPR-ART32-001-C2", description: "Technical implementation of pseudonymisation in place", status: "not-implemented" },
18
+ { id: "GDPR-ART32-001-C3", description: "Mapping table secured with access controls", status: "not-implemented" },
19
+ ],
20
+ },
21
+ {
22
+ id: "GDPR-ART32-002",
23
+ name: "Encryption at Rest",
24
+ description: "Implement encryption of personal data at rest using approved algorithms.",
25
+ category: "encryption",
26
+ framework: "GDPR",
27
+ article: "Article 32(1)(a)",
28
+ status: "not-implemented",
29
+ severity: "critical",
30
+ implementation_guidance: "Use AES-256-GCM or ChaCha20-Poly1305 for data at rest. Encrypt databases, file storage, and backups. Manage keys via vault or KMS.",
31
+ checks: [
32
+ { id: "GDPR-ART32-002-C1", description: "Database encryption enabled", status: "not-implemented" },
33
+ { id: "GDPR-ART32-002-C2", description: "File storage encryption enabled", status: "not-implemented" },
34
+ { id: "GDPR-ART32-002-C3", description: "Backup encryption enabled", status: "not-implemented" },
35
+ { id: "GDPR-ART32-002-C4", description: "Key management via approved system (Vault/KMS)", status: "not-implemented" },
36
+ ],
37
+ },
38
+ {
39
+ id: "GDPR-ART32-003",
40
+ name: "Encryption in Transit",
41
+ description: "Ensure all personal data transmitted is encrypted using TLS 1.2 minimum.",
42
+ category: "encryption",
43
+ framework: "GDPR",
44
+ article: "Article 32(1)(a)",
45
+ status: "not-implemented",
46
+ severity: "critical",
47
+ implementation_guidance: "Enforce TLS 1.2 minimum, prefer TLS 1.3. Configure HSTS. Disable older protocols. Use strong cipher suites.",
48
+ checks: [
49
+ { id: "GDPR-ART32-003-C1", description: "TLS 1.2 minimum enforced on all endpoints", status: "not-implemented" },
50
+ { id: "GDPR-ART32-003-C2", description: "HSTS headers configured", status: "not-implemented" },
51
+ { id: "GDPR-ART32-003-C3", description: "Strong cipher suites only", status: "not-implemented" },
52
+ ],
53
+ },
54
+ {
55
+ id: "GDPR-ART32-004",
56
+ name: "Unique User Identification",
57
+ description: "Ensure unique identification of each user through secure authentication.",
58
+ category: "authentication",
59
+ framework: "GDPR",
60
+ article: "Article 32(1)(b)",
61
+ status: "not-implemented",
62
+ severity: "critical",
63
+ implementation_guidance: "Implement unique user IDs. Use Argon2id for password hashing. Support MFA and passkeys.",
64
+ checks: [
65
+ { id: "GDPR-ART32-004-C1", description: "Unique user identification implemented", status: "not-implemented" },
66
+ { id: "GDPR-ART32-004-C2", description: "Secure password hashing (Argon2id)", status: "not-implemented" },
67
+ { id: "GDPR-ART32-004-C3", description: "MFA support implemented", status: "not-implemented" },
68
+ ],
69
+ },
70
+ {
71
+ id: "GDPR-ART32-005",
72
+ name: "Automatic Session Timeout",
73
+ description: "Implement automatic session expiration after period of inactivity.",
74
+ category: "authentication",
75
+ framework: "GDPR",
76
+ article: "Article 32(1)(b)",
77
+ status: "not-implemented",
78
+ severity: "high",
79
+ implementation_guidance: "Set maximum session duration. Implement idle timeout (15-30 minutes). Require re-authentication for sensitive operations.",
80
+ checks: [
81
+ { id: "GDPR-ART32-005-C1", description: "Session timeout configured", status: "not-implemented" },
82
+ { id: "GDPR-ART32-005-C2", description: "Idle timeout implemented", status: "not-implemented" },
83
+ { id: "GDPR-ART32-005-C3", description: "Re-authentication for sensitive operations", status: "not-implemented" },
84
+ ],
85
+ },
86
+ {
87
+ id: "GDPR-ART32-006",
88
+ name: "Audit Logging",
89
+ description: "Maintain comprehensive audit logs of all access and processing activities.",
90
+ category: "audit",
91
+ framework: "GDPR",
92
+ article: "Article 32(1)(b)",
93
+ status: "not-implemented",
94
+ severity: "critical",
95
+ implementation_guidance: "Log all authentication, authorization, data access, exports, and admin actions. Never log passwords, tokens, or sensitive data. Ensure logs are immutable.",
96
+ checks: [
97
+ { id: "GDPR-ART32-006-C1", description: "Audit logging system implemented", status: "not-implemented" },
98
+ { id: "GDPR-ART32-006-C2", description: "Logs include required fields (userId, action, resource, timestamp, IP)", status: "not-implemented" },
99
+ { id: "GDPR-ART32-006-C3", description: "Logs are immutable (append-only)", status: "not-implemented" },
100
+ { id: "GDPR-ART32-006-C4", description: "Sensitive data is not logged", status: "not-implemented" },
101
+ ],
102
+ },
103
+ {
104
+ id: "GDPR-ART32-007",
105
+ name: "Integrity Controls",
106
+ description: "Implement measures to ensure ongoing integrity of personal data.",
107
+ category: "data-integrity",
108
+ framework: "GDPR",
109
+ article: "Article 32(1)(b)",
110
+ status: "not-implemented",
111
+ severity: "high",
112
+ implementation_guidance: "Use checksums or hashes for data integrity verification. Implement input validation. Use database constraints.",
113
+ checks: [
114
+ { id: "GDPR-ART32-007-C1", description: "Data integrity verification implemented", status: "not-implemented" },
115
+ { id: "GDPR-ART32-007-C2", description: "Input validation on all data entry points", status: "not-implemented" },
116
+ { id: "GDPR-ART32-007-C3", description: "Database constraints enforced", status: "not-implemented" },
117
+ ],
118
+ },
119
+ {
120
+ id: "GDPR-ART32-008",
121
+ name: "Backup and Recovery",
122
+ description: "Implement regular backup and recovery procedures for personal data.",
123
+ category: "backup",
124
+ framework: "GDPR",
125
+ article: "Article 32(1)(b)",
126
+ status: "not-implemented",
127
+ severity: "critical",
128
+ implementation_guidance: "Perform daily encrypted backups. Test restores weekly. Conduct monthly recovery tests. Document backup procedures.",
129
+ checks: [
130
+ { id: "GDPR-ART32-008-C1", description: "Daily backup schedule configured", status: "not-implemented" },
131
+ { id: "GDPR-ART32-008-C2", description: "Backups are encrypted", status: "not-implemented" },
132
+ { id: "GDPR-ART32-008-C3", description: "Weekly restore tests performed", status: "not-implemented" },
133
+ { id: "GDPR-ART32-008-C4", description: "Monthly recovery tests documented", status: "not-implemented" },
134
+ ],
135
+ },
136
+ {
137
+ id: "GDPR-ART32-009",
138
+ name: "Regular Security Testing",
139
+ description: "Conduct regular testing, assessment, and evaluation of security measures.",
140
+ category: "security-testing",
141
+ framework: "GDPR",
142
+ article: "Article 32(1)(d)",
143
+ status: "not-implemented",
144
+ severity: "critical",
145
+ implementation_guidance: "Run dependency scans (Trivy, Dependabot). Perform secret scanning (Gitleaks). Use SAST (Semgrep). Schedule penetration tests.",
146
+ checks: [
147
+ { id: "GDPR-ART32-009-C1", description: "Dependency scanning in CI/CD", status: "not-implemented" },
148
+ { id: "GDPR-ART32-009-C2", description: "Secret scanning in CI/CD", status: "not-implemented" },
149
+ { id: "GDPR-ART32-009-C3", description: "SAST analysis integrated", status: "not-implemented" },
150
+ { id: "GDPR-ART32-009-C4", description: "Penetration test schedule defined", status: "not-implemented" },
151
+ ],
152
+ },
153
+ ];
154
+ }
@@ -0,0 +1,37 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+
3
+ export function createArticle33Controls(): Control[] {
4
+ return [
5
+ {
6
+ id: "GDPR-ART33-001",
7
+ name: "Data Breach Notification to Authority",
8
+ description: "Notify the supervisory authority of a personal data breach within 72 hours.",
9
+ category: "incident-response",
10
+ framework: "GDPR",
11
+ article: "Article 33(1)",
12
+ status: "not-implemented",
13
+ severity: "critical",
14
+ implementation_guidance: "Create a breach notification procedure. Define escalation paths. Prepare notification templates. Maintain contact details for supervisory authorities.",
15
+ checks: [
16
+ { id: "GDPR-ART33-001-C1", description: "Breach notification procedure documented", status: "not-implemented" },
17
+ { id: "GDPR-ART33-001-C2", description: "72-hour notification timeline achievable", status: "not-implemented" },
18
+ { id: "GDPR-ART33-001-C3", description: "Supervisory authority contacts maintained", status: "not-implemented" },
19
+ ],
20
+ },
21
+ {
22
+ id: "GDPR-ART33-002",
23
+ name: "Breach Documentation",
24
+ description: "Document all data breaches including facts, effects, and remedial actions.",
25
+ category: "incident-response",
26
+ framework: "GDPR",
27
+ article: "Article 33(4)",
28
+ status: "not-implemented",
29
+ severity: "high",
30
+ implementation_guidance: "Maintain a breach register. Record: nature of breach, categories and number of data subjects, likely consequences, and measures taken.",
31
+ checks: [
32
+ { id: "GDPR-ART33-002-C1", description: "Breach register maintained", status: "not-implemented" },
33
+ { id: "GDPR-ART33-002-C2", description: "All required breach details documented", status: "not-implemented" },
34
+ ],
35
+ },
36
+ ];
37
+ }
@@ -0,0 +1,22 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+
3
+ export function createArticle34Controls(): Control[] {
4
+ return [
5
+ {
6
+ id: "GDPR-ART34-001",
7
+ name: "Data Breach Communication to Data Subjects",
8
+ description: "Communicate personal data breaches to affected data subjects when likely to result in high risk.",
9
+ category: "incident-response",
10
+ framework: "GDPR",
11
+ article: "Article 34(1)",
12
+ status: "not-implemented",
13
+ severity: "critical",
14
+ implementation_guidance: "Prepare data subject notification templates. Define criteria for high-risk breaches. Establish communication channels.",
15
+ checks: [
16
+ { id: "GDPR-ART34-001-C1", description: "Data subject notification templates prepared", status: "not-implemented" },
17
+ { id: "GDPR-ART34-001-C2", description: "High-risk criteria defined", status: "not-implemented" },
18
+ { id: "GDPR-ART34-001-C3", description: "Communication channels established", status: "not-implemented" },
19
+ ],
20
+ },
21
+ ];
22
+ }
@@ -0,0 +1,99 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+
3
+ export function createArticle5Controls(): Control[] {
4
+ return [
5
+ {
6
+ id: "GDPR-ART5-001",
7
+ name: "Lawfulness, Fairness, and Transparency",
8
+ description: "Personal data must be processed lawfully, fairly, and in a transparent manner.",
9
+ category: "data-processing",
10
+ framework: "GDPR",
11
+ article: "Article 5(1)(a)",
12
+ status: "not-implemented",
13
+ severity: "critical",
14
+ implementation_guidance: "Implement a consent management system. Maintain a record of legal bases for each processing activity. Provide clear privacy notices.",
15
+ checks: [
16
+ { id: "GDPR-ART5-001-C1", description: "Legal basis documented for each processing activity", status: "not-implemented" },
17
+ { id: "GDPR-ART5-001-C2", description: "Privacy notice is clear and accessible", status: "not-implemented" },
18
+ { id: "GDPR-ART5-001-C3", description: "Consent mechanism implemented where required", status: "not-implemented" },
19
+ ],
20
+ },
21
+ {
22
+ id: "GDPR-ART5-002",
23
+ name: "Purpose Limitation",
24
+ description: "Personal data must be collected for specified, explicit, and legitimate purposes.",
25
+ category: "data-processing",
26
+ framework: "GDPR",
27
+ article: "Article 5(1)(b)",
28
+ status: "not-implemented",
29
+ severity: "critical",
30
+ implementation_guidance: "Document all purposes of data processing. Implement controls to prevent processing beyond declared purposes.",
31
+ checks: [
32
+ { id: "GDPR-ART5-002-C1", description: "Purpose of each data collection documented", status: "not-implemented" },
33
+ { id: "GDPR-ART5-002-C2", description: "Technical controls prevent unauthorized purpose deviation", status: "not-implemented" },
34
+ ],
35
+ },
36
+ {
37
+ id: "GDPR-ART5-003",
38
+ name: "Data Minimisation",
39
+ description: "Personal data must be adequate, relevant, and limited to what is necessary.",
40
+ category: "data-processing",
41
+ framework: "GDPR",
42
+ article: "Article 5(1)(c)",
43
+ status: "not-implemented",
44
+ severity: "high",
45
+ implementation_guidance: "Review data collection forms and APIs to ensure only necessary data is collected. Remove unused data fields.",
46
+ checks: [
47
+ { id: "GDPR-ART5-003-C1", description: "Data collection reviewed for minimisation", status: "not-implemented" },
48
+ { id: "GDPR-ART5-003-C2", description: "No unnecessary data fields in forms and APIs", status: "not-implemented" },
49
+ ],
50
+ },
51
+ {
52
+ id: "GDPR-ART5-004",
53
+ name: "Accuracy",
54
+ description: "Personal data must be accurate and, where necessary, kept up to date.",
55
+ category: "data-quality",
56
+ framework: "GDPR",
57
+ article: "Article 5(1)(d)",
58
+ status: "not-implemented",
59
+ severity: "high",
60
+ implementation_guidance: "Implement data validation on input. Provide user self-service for data updates. Schedule periodic data accuracy reviews.",
61
+ checks: [
62
+ { id: "GDPR-ART5-004-C1", description: "Input validation implemented for personal data", status: "not-implemented" },
63
+ { id: "GDPR-ART5-004-C2", description: "Users can update their own data", status: "not-implemented" },
64
+ ],
65
+ },
66
+ {
67
+ id: "GDPR-ART5-005",
68
+ name: "Storage Limitation",
69
+ description: "Personal data must be kept in identifiable form no longer than necessary.",
70
+ category: "data-retention",
71
+ framework: "GDPR",
72
+ article: "Article 5(1)(e)",
73
+ status: "not-implemented",
74
+ severity: "critical",
75
+ implementation_guidance: "Define retention periods per data category. Implement automated deletion or anonymisation. Document retention policies.",
76
+ checks: [
77
+ { id: "GDPR-ART5-005-C1", description: "Retention periods defined per data category", status: "not-implemented" },
78
+ { id: "GDPR-ART5-005-C2", description: "Automated deletion or anonymisation implemented", status: "not-implemented" },
79
+ { id: "GDPR-ART5-005-C3", description: "Retention policy documented", status: "not-implemented" },
80
+ ],
81
+ },
82
+ {
83
+ id: "GDPR-ART5-006",
84
+ name: "Integrity and Confidentiality",
85
+ description: "Personal data must be processed with appropriate security measures.",
86
+ category: "security",
87
+ framework: "GDPR",
88
+ article: "Article 5(1)(f)",
89
+ status: "not-implemented",
90
+ severity: "critical",
91
+ implementation_guidance: "Implement encryption at rest and in transit. Use access controls. Ensure data integrity checks.",
92
+ checks: [
93
+ { id: "GDPR-ART5-006-C1", description: "Encryption at rest configured", status: "not-implemented" },
94
+ { id: "GDPR-ART5-006-C2", description: "Encryption in transit enforced (TLS 1.2+)", status: "not-implemented" },
95
+ { id: "GDPR-ART5-006-C3", description: "Access controls implemented", status: "not-implemented" },
96
+ ],
97
+ },
98
+ ];
99
+ }
package/src/index.ts ADDED
@@ -0,0 +1,38 @@
1
+ import type { Control } from "@greenarmor/ges-core";
2
+ import { createArticle5Controls } from "./article-5.js";
3
+ import { createArticle25Controls } from "./article-25.js";
4
+ import { createArticle30Controls } from "./article-30.js";
5
+ import { createArticle32Controls } from "./article-32.js";
6
+ import { createArticle33Controls } from "./article-33.js";
7
+ import { createArticle34Controls } from "./article-34.js";
8
+
9
+ export function createGDPRControls(): Control[] {
10
+ return [
11
+ ...createArticle5Controls(),
12
+ ...createArticle25Controls(),
13
+ ...createArticle30Controls(),
14
+ ...createArticle32Controls(),
15
+ ...createArticle33Controls(),
16
+ ...createArticle34Controls(),
17
+ ];
18
+ }
19
+
20
+ export { createArticle5Controls } from "./article-5.js";
21
+ export { createArticle25Controls } from "./article-25.js";
22
+ export { createArticle30Controls } from "./article-30.js";
23
+ export { createArticle32Controls } from "./article-32.js";
24
+ export { createArticle33Controls } from "./article-33.js";
25
+ export { createArticle34Controls } from "./article-34.js";
26
+
27
+ export function evaluateControl(control: Control): Control {
28
+ const totalChecks = control.checks.length;
29
+ const passedChecks = control.checks.filter(c => c.status === "pass").length;
30
+
31
+ if (passedChecks === totalChecks) {
32
+ return { ...control, status: "pass" };
33
+ }
34
+ if (passedChecks === 0) {
35
+ return { ...control, status: control.status === "not-implemented" ? "not-implemented" : "fail" };
36
+ }
37
+ return { ...control, status: "warning" };
38
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist",
5
+ "rootDir": "./src"
6
+ },
7
+ "include": ["src"],
8
+ "references": [
9
+ { "path": "../core" }
10
+ ]
11
+ }
@@ -0,0 +1 @@
1
+ {"fileNames":["../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../core/dist/types/index.d.ts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typealiases.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/index.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/zoderror.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/enumutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/partialutil.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/standard-schema.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.d.cts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.d.cts","../core/dist/schemas/index.d.ts","../core/dist/constants/index.d.ts","../core/dist/index.d.ts","./src/article-25.ts","./src/article-30.ts","./src/article-32.ts","./src/article-33.ts","./src/article-34.ts","./src/article-5.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/index.d.ts"],"fileIdsList":[[100,145,146,148,165,166],[100,147,148,165,166],[148,165,166],[100,148,153,165,166,183],[100,148,149,154,159,165,166,168,180,191],[100,148,149,150,159,165,166,168],[100,148,165,166],[95,96,97,100,148,165,166],[100,148,151,165,166,192],[100,148,152,153,160,165,166,169],[100,148,153,165,166,180,188],[100,148,154,156,159,165,166,168],[100,147,148,155,165,166],[100,148,156,157,165,166],[100,148,158,159,165,166],[100,147,148,159,165,166],[100,148,159,160,161,165,166,180,191],[100,148,159,160,161,165,166,175,180,183],[100,141,148,156,159,162,165,166,168,180,191],[100,148,159,160,162,163,165,166,168,180,188,191],[100,148,162,164,165,166,180,188,191],[98,99,100,101,102,103,104,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197],[100,148,159,165,166],[100,148,165,166,167,191],[100,148,156,159,165,166,168,180],[100,148,165,166,169],[100,148,165,166,170],[100,147,148,165,166,171],[100,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197],[100,148,165,166,173],[100,148,165,166,174],[100,148,159,165,166,175,176],[100,148,165,166,175,177,192,194],[100,148,160,165,166],[100,148,159,165,166,180,181,183],[100,148,165,166,182,183],[100,148,165,166,180,181],[100,148,165,166,183],[100,148,165,166,184],[100,145,148,165,166,180,185,191],[100,148,159,165,166,186,187],[100,148,165,166,186,187],[100,148,153,165,166,168,180,188],[100,148,165,166,189],[100,148,165,166,168,190],[100,148,162,165,166,174,191],[100,148,153,165,166,192],[100,148,165,166,180,193],[100,148,165,166,167,194],[100,148,165,166,195],[100,141,148,165,166],[100,141,148,159,161,165,166,171,180,183,191,193,194,196],[100,148,165,166,180,197],[100,113,117,148,165,166,191],[100,113,148,165,166,180,191],[100,108,148,165,166],[100,110,113,148,165,166,188,191],[100,148,165,166,168,188],[100,148,165,166,198],[100,108,148,165,166,198],[100,110,113,148,165,166,168,191],[100,105,106,109,112,148,159,165,166,180,191],[100,113,120,148,165,166],[100,105,111,148,165,166],[100,113,134,135,148,165,166],[100,109,113,148,165,166,183,191,198],[100,134,148,165,166,198],[100,107,108,148,165,166,198],[100,113,148,165,166],[100,107,108,109,110,111,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,148,165,166],[100,113,128,148,165,166],[100,113,120,121,148,165,166],[100,111,113,121,122,148,165,166],[100,112,148,165,166],[100,105,108,113,148,165,166],[100,113,117,121,122,148,165,166],[100,117,148,165,166],[100,111,113,116,148,165,166,191],[100,105,110,113,120,148,165,166],[100,148,165,166,180],[100,108,113,134,148,165,166,196,198],[83,100,148,165,166],[74,75,100,148,165,166],[71,72,74,76,77,82,100,148,165,166],[72,74,100,148,165,166],[82,100,148,165,166],[74,100,148,165,166],[71,72,74,77,78,79,80,81,100,148,165,166],[71,72,73,100,148,165,166],[87,100,148,165,166],[87,88,89,90,91,92,93,100,148,165,166],[70,100,148,165,166],[70,85,86,100,148,165,166],[84,100,148,165,166]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"e81191d4828da792ee01ee520186b4bc5dd05670f368b5b88ba0649104c0006a","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","impliedFormat":1},{"version":"0425bd0db6ddbbc92fca5dea310beaa93272c71a154098807c2d99262452cb6a","impliedFormat":99},{"version":"a7b097cee9d9dffb3eb5ae0f1c49c57c22b8a6fba4ac51e57f78c065f4ba685d","impliedFormat":99},{"version":"efae9bbcdfb646fda95a2a7608ab1bbfa4e25fba09c7c1a2e81626372fc3f2ac","impliedFormat":99},{"version":"f76b6048a665273440435fcab5a94e126a64392c846469075f480baf21a9ad5b","signature":"9d1f7963ee3bca99d4f32f80bcfe006d3d88e5239957d99501d534199c0a8551","impliedFormat":99},{"version":"e0e19f750c24be54f5ff77ee176d9bb26e82c21cbca96e1ee8a5faf22112f0b1","signature":"e4537f5b837d448f101b16f0cf3a393c8fa43d5f6865876177e3ddc8519be4b9","impliedFormat":99},{"version":"575a6b82856266b056ecbe8a6786c85fbd33fc266d12e78bb2e74ae197e2fc08","signature":"48af9e064f861567bebcabcb685ab106980343f4e701ac576b316450f7bb72d2","impliedFormat":99},{"version":"560468586a986160381dce966a3042f6a2479f9a7690057720bc134cb0441489","signature":"80bfd93b2bc01ab3de204577833d7087c74a1ed306f659909de9a53d25a18735","impliedFormat":99},{"version":"7b5ba69a4cd052cd5d9fbf1263b98764b8e338d6bb447d8131688fd5e0f16dd6","signature":"f18740f5c52cb5c011e3f43c43c2707599bff0ce6cfc7291b6cbeec3a196607a","impliedFormat":99},{"version":"a20a9c140334c94e6ac5bfe3ee07722c556eea6873cb5e40e07f9152c44934de","signature":"a6892dcff7eb5004af255b8ad4e0ea82b922500b5eafb73210e70df98a232c00","impliedFormat":99},{"version":"983bb1592abbd650451e7066ec8effcc09d79bf8dbcc2cd9815d9db5e5ed152c","signature":"4b79ce37ebc2c56bd5db79d7e0b99301a98117ec4453b03655e06ed558b2b277","impliedFormat":99},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"73b5fa37db36eeac90c4d752e39586f1b57187400c4f5280fd05f16437287a45","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1}],"root":[[88,94]],"options":{"composite":true,"declaration":true,"declarationMap":false,"esModuleInterop":true,"module":100,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":11},"referencedMap":[[145,1],[146,1],[147,2],[100,3],[148,4],[149,5],[150,6],[95,7],[98,8],[96,7],[97,7],[151,9],[152,10],[153,11],[154,12],[155,13],[156,14],[157,14],[158,15],[159,16],[160,17],[161,18],[101,7],[99,7],[162,19],[163,20],[164,21],[198,22],[165,23],[166,7],[167,24],[168,25],[169,26],[170,27],[171,28],[172,29],[173,30],[174,31],[175,32],[176,32],[177,33],[178,7],[179,34],[180,35],[182,36],[181,37],[183,38],[184,39],[185,40],[186,41],[187,42],[188,43],[189,44],[190,45],[191,46],[192,47],[193,48],[194,49],[195,50],[102,7],[103,7],[104,7],[142,51],[143,7],[144,7],[196,52],[197,53],[68,7],[69,7],[13,7],[12,7],[2,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[20,7],[21,7],[3,7],[22,7],[23,7],[4,7],[24,7],[28,7],[25,7],[26,7],[27,7],[29,7],[30,7],[31,7],[5,7],[32,7],[33,7],[34,7],[35,7],[6,7],[39,7],[36,7],[37,7],[38,7],[40,7],[7,7],[41,7],[46,7],[47,7],[42,7],[43,7],[44,7],[45,7],[8,7],[51,7],[48,7],[49,7],[50,7],[52,7],[9,7],[53,7],[54,7],[55,7],[57,7],[56,7],[58,7],[59,7],[10,7],[60,7],[61,7],[62,7],[11,7],[63,7],[64,7],[65,7],[66,7],[67,7],[1,7],[120,54],[130,55],[119,54],[140,56],[111,57],[110,58],[139,59],[133,60],[138,61],[113,62],[127,63],[112,64],[136,65],[108,66],[107,59],[137,67],[109,68],[114,69],[115,7],[118,69],[105,7],[141,70],[131,71],[122,72],[123,73],[125,74],[121,75],[124,76],[134,59],[116,77],[117,78],[126,79],[106,80],[129,71],[128,69],[132,7],[135,81],[84,82],[76,83],[83,84],[78,7],[79,7],[77,85],[80,86],[71,7],[72,7],[73,82],[75,87],[81,7],[82,88],[74,89],[88,90],[89,90],[90,90],[91,90],[92,90],[93,90],[94,91],[86,92],[87,93],[85,94],[70,7]],"latestChangedDtsFile":"./dist/index.d.ts","version":"6.0.3"}