@pan-sec/notebooklm-mcp 1.4.0 → 1.7.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/README.md +61 -7
- package/SECURITY.md +40 -6
- package/dist/auth/mcp-auth.d.ts.map +1 -1
- package/dist/auth/mcp-auth.js +3 -6
- package/dist/auth/mcp-auth.js.map +1 -1
- package/dist/compliance/alert-manager.d.ts +120 -0
- package/dist/compliance/alert-manager.d.ts.map +1 -0
- package/dist/compliance/alert-manager.js +420 -0
- package/dist/compliance/alert-manager.js.map +1 -0
- package/dist/compliance/breach-detection.d.ts +134 -0
- package/dist/compliance/breach-detection.d.ts.map +1 -0
- package/dist/compliance/breach-detection.js +456 -0
- package/dist/compliance/breach-detection.js.map +1 -0
- package/dist/compliance/change-log.d.ts +113 -0
- package/dist/compliance/change-log.d.ts.map +1 -0
- package/dist/compliance/change-log.js +275 -0
- package/dist/compliance/change-log.js.map +1 -0
- package/dist/compliance/compliance-logger.d.ts +136 -0
- package/dist/compliance/compliance-logger.d.ts.map +1 -0
- package/dist/compliance/compliance-logger.js +425 -0
- package/dist/compliance/compliance-logger.js.map +1 -0
- package/dist/compliance/compliance-tools.d.ts +18 -0
- package/dist/compliance/compliance-tools.d.ts.map +1 -0
- package/dist/compliance/compliance-tools.js +673 -0
- package/dist/compliance/compliance-tools.js.map +1 -0
- package/dist/compliance/consent-manager.d.ts +130 -0
- package/dist/compliance/consent-manager.d.ts.map +1 -0
- package/dist/compliance/consent-manager.js +386 -0
- package/dist/compliance/consent-manager.js.map +1 -0
- package/dist/compliance/dashboard.d.ts +243 -0
- package/dist/compliance/dashboard.d.ts.map +1 -0
- package/dist/compliance/dashboard.js +519 -0
- package/dist/compliance/dashboard.js.map +1 -0
- package/dist/compliance/data-classification.d.ts +117 -0
- package/dist/compliance/data-classification.d.ts.map +1 -0
- package/dist/compliance/data-classification.js +469 -0
- package/dist/compliance/data-classification.js.map +1 -0
- package/dist/compliance/data-erasure.d.ts +110 -0
- package/dist/compliance/data-erasure.d.ts.map +1 -0
- package/dist/compliance/data-erasure.js +501 -0
- package/dist/compliance/data-erasure.js.map +1 -0
- package/dist/compliance/data-export.d.ts +85 -0
- package/dist/compliance/data-export.d.ts.map +1 -0
- package/dist/compliance/data-export.js +394 -0
- package/dist/compliance/data-export.js.map +1 -0
- package/dist/compliance/data-inventory.d.ts +136 -0
- package/dist/compliance/data-inventory.d.ts.map +1 -0
- package/dist/compliance/data-inventory.js +335 -0
- package/dist/compliance/data-inventory.js.map +1 -0
- package/dist/compliance/dsar-handler.d.ts +123 -0
- package/dist/compliance/dsar-handler.d.ts.map +1 -0
- package/dist/compliance/dsar-handler.js +371 -0
- package/dist/compliance/dsar-handler.js.map +1 -0
- package/dist/compliance/evidence-collector.d.ts +187 -0
- package/dist/compliance/evidence-collector.d.ts.map +1 -0
- package/dist/compliance/evidence-collector.js +656 -0
- package/dist/compliance/evidence-collector.js.map +1 -0
- package/dist/compliance/health-monitor.d.ts +111 -0
- package/dist/compliance/health-monitor.d.ts.map +1 -0
- package/dist/compliance/health-monitor.js +509 -0
- package/dist/compliance/health-monitor.js.map +1 -0
- package/dist/compliance/incident-manager.d.ts +131 -0
- package/dist/compliance/incident-manager.d.ts.map +1 -0
- package/dist/compliance/incident-manager.js +418 -0
- package/dist/compliance/incident-manager.js.map +1 -0
- package/dist/compliance/index.d.ts +32 -0
- package/dist/compliance/index.d.ts.map +1 -0
- package/dist/compliance/index.js +35 -0
- package/dist/compliance/index.js.map +1 -0
- package/dist/compliance/policy-docs.d.ts +108 -0
- package/dist/compliance/policy-docs.d.ts.map +1 -0
- package/dist/compliance/policy-docs.js +464 -0
- package/dist/compliance/policy-docs.js.map +1 -0
- package/dist/compliance/privacy-notice-text.d.ts +58 -0
- package/dist/compliance/privacy-notice-text.d.ts.map +1 -0
- package/dist/compliance/privacy-notice-text.js +161 -0
- package/dist/compliance/privacy-notice-text.js.map +1 -0
- package/dist/compliance/privacy-notice.d.ts +128 -0
- package/dist/compliance/privacy-notice.d.ts.map +1 -0
- package/dist/compliance/privacy-notice.js +250 -0
- package/dist/compliance/privacy-notice.js.map +1 -0
- package/dist/compliance/report-generator.d.ts +168 -0
- package/dist/compliance/report-generator.d.ts.map +1 -0
- package/dist/compliance/report-generator.js +830 -0
- package/dist/compliance/report-generator.js.map +1 -0
- package/dist/compliance/retention-engine.d.ts +130 -0
- package/dist/compliance/retention-engine.d.ts.map +1 -0
- package/dist/compliance/retention-engine.js +510 -0
- package/dist/compliance/retention-engine.js.map +1 -0
- package/dist/compliance/siem-exporter.d.ts +150 -0
- package/dist/compliance/siem-exporter.d.ts.map +1 -0
- package/dist/compliance/siem-exporter.js +509 -0
- package/dist/compliance/siem-exporter.js.map +1 -0
- package/dist/compliance/types.d.ts +601 -0
- package/dist/compliance/types.d.ts.map +1 -0
- package/dist/compliance/types.js +22 -0
- package/dist/compliance/types.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -1
- package/dist/config.js.map +1 -1
- package/dist/events/event-emitter.d.ts +45 -0
- package/dist/events/event-emitter.d.ts.map +1 -0
- package/dist/events/event-emitter.js +100 -0
- package/dist/events/event-emitter.js.map +1 -0
- package/dist/events/event-types.d.ts +124 -0
- package/dist/events/event-types.d.ts.map +1 -0
- package/dist/events/event-types.js +18 -0
- package/dist/events/event-types.js.map +1 -0
- package/dist/index.js +59 -2
- package/dist/index.js.map +1 -1
- package/dist/library/notebook-library.d.ts +25 -2
- package/dist/library/notebook-library.d.ts.map +1 -1
- package/dist/library/notebook-library.js +144 -3
- package/dist/library/notebook-library.js.map +1 -1
- package/dist/library/types.d.ts +15 -0
- package/dist/library/types.d.ts.map +1 -1
- package/dist/notebook-creation/audio-manager.d.ts +56 -0
- package/dist/notebook-creation/audio-manager.d.ts.map +1 -0
- package/dist/notebook-creation/audio-manager.js +335 -0
- package/dist/notebook-creation/audio-manager.js.map +1 -0
- package/dist/notebook-creation/discover-creation-flow.d.ts +8 -0
- package/dist/notebook-creation/discover-creation-flow.d.ts.map +1 -0
- package/dist/notebook-creation/discover-creation-flow.js +177 -0
- package/dist/notebook-creation/discover-creation-flow.js.map +1 -0
- package/dist/notebook-creation/discover-quota.d.ts +8 -0
- package/dist/notebook-creation/discover-quota.d.ts.map +1 -0
- package/dist/notebook-creation/discover-quota.js +195 -0
- package/dist/notebook-creation/discover-quota.js.map +1 -0
- package/dist/notebook-creation/discover-source-dialog.d.ts +8 -0
- package/dist/notebook-creation/discover-source-dialog.d.ts.map +1 -0
- package/dist/notebook-creation/discover-source-dialog.js +134 -0
- package/dist/notebook-creation/discover-source-dialog.js.map +1 -0
- package/dist/notebook-creation/discover-sources.d.ts +8 -0
- package/dist/notebook-creation/discover-sources.d.ts.map +1 -0
- package/dist/notebook-creation/discover-sources.js +273 -0
- package/dist/notebook-creation/discover-sources.js.map +1 -0
- package/dist/notebook-creation/discover-text-input.d.ts +7 -0
- package/dist/notebook-creation/discover-text-input.d.ts.map +1 -0
- package/dist/notebook-creation/discover-text-input.js +135 -0
- package/dist/notebook-creation/discover-text-input.js.map +1 -0
- package/dist/notebook-creation/index.d.ts +12 -0
- package/dist/notebook-creation/index.d.ts.map +1 -0
- package/dist/notebook-creation/index.js +12 -0
- package/dist/notebook-creation/index.js.map +1 -0
- package/dist/notebook-creation/notebook-creator.d.ts +95 -0
- package/dist/notebook-creation/notebook-creator.d.ts.map +1 -0
- package/dist/notebook-creation/notebook-creator.js +689 -0
- package/dist/notebook-creation/notebook-creator.js.map +1 -0
- package/dist/notebook-creation/notebook-sync.d.ts +93 -0
- package/dist/notebook-creation/notebook-sync.d.ts.map +1 -0
- package/dist/notebook-creation/notebook-sync.js +370 -0
- package/dist/notebook-creation/notebook-sync.js.map +1 -0
- package/dist/notebook-creation/run-discovery.d.ts +11 -0
- package/dist/notebook-creation/run-discovery.d.ts.map +1 -0
- package/dist/notebook-creation/run-discovery.js +151 -0
- package/dist/notebook-creation/run-discovery.js.map +1 -0
- package/dist/notebook-creation/selector-discovery.d.ts +65 -0
- package/dist/notebook-creation/selector-discovery.d.ts.map +1 -0
- package/dist/notebook-creation/selector-discovery.js +421 -0
- package/dist/notebook-creation/selector-discovery.js.map +1 -0
- package/dist/notebook-creation/selectors.d.ts +150 -0
- package/dist/notebook-creation/selectors.d.ts.map +1 -0
- package/dist/notebook-creation/selectors.js +225 -0
- package/dist/notebook-creation/selectors.js.map +1 -0
- package/dist/notebook-creation/source-manager.d.ts +73 -0
- package/dist/notebook-creation/source-manager.d.ts.map +1 -0
- package/dist/notebook-creation/source-manager.js +486 -0
- package/dist/notebook-creation/source-manager.js.map +1 -0
- package/dist/notebook-creation/test-create.d.ts +8 -0
- package/dist/notebook-creation/test-create.d.ts.map +1 -0
- package/dist/notebook-creation/test-create.js +72 -0
- package/dist/notebook-creation/test-create.js.map +1 -0
- package/dist/notebook-creation/types.d.ts +173 -0
- package/dist/notebook-creation/types.d.ts.map +1 -0
- package/dist/notebook-creation/types.js +5 -0
- package/dist/notebook-creation/types.js.map +1 -0
- package/dist/quota/index.d.ts +8 -0
- package/dist/quota/index.d.ts.map +1 -0
- package/dist/quota/index.js +8 -0
- package/dist/quota/index.js.map +1 -0
- package/dist/quota/quota-manager.d.ts +125 -0
- package/dist/quota/quota-manager.d.ts.map +1 -0
- package/dist/quota/quota-manager.js +330 -0
- package/dist/quota/quota-manager.js.map +1 -0
- package/dist/session/session-manager.d.ts +5 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +6 -0
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/shared-context-manager.d.ts.map +1 -1
- package/dist/session/shared-context-manager.js +2 -1
- package/dist/session/shared-context-manager.js.map +1 -1
- package/dist/tools/definitions/notebook-management.d.ts.map +1 -1
- package/dist/tools/definitions/notebook-management.js +525 -0
- package/dist/tools/definitions/notebook-management.js.map +1 -1
- package/dist/tools/definitions/system.d.ts.map +1 -1
- package/dist/tools/definitions/system.js +158 -0
- package/dist/tools/definitions/system.js.map +1 -1
- package/dist/tools/handlers.d.ts +225 -0
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +911 -0
- package/dist/tools/handlers.js.map +1 -1
- package/dist/utils/audit-logger.d.ts +21 -1
- package/dist/utils/audit-logger.d.ts.map +1 -1
- package/dist/utils/audit-logger.js +53 -4
- package/dist/utils/audit-logger.js.map +1 -1
- package/dist/utils/crypto.d.ts.map +1 -1
- package/dist/utils/crypto.js +8 -15
- package/dist/utils/crypto.js.map +1 -1
- package/dist/utils/file-permissions.d.ts +85 -0
- package/dist/utils/file-permissions.d.ts.map +1 -0
- package/dist/utils/file-permissions.js +180 -0
- package/dist/utils/file-permissions.js.map +1 -0
- package/dist/utils/settings-manager.d.ts.map +1 -1
- package/dist/utils/settings-manager.js +6 -11
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/webhooks/index.d.ts +8 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +8 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/types.d.ts +57 -0
- package/dist/webhooks/types.d.ts.map +1 -0
- package/dist/webhooks/types.js +5 -0
- package/dist/webhooks/types.js.map +1 -0
- package/dist/webhooks/webhook-dispatcher.d.ts +120 -0
- package/dist/webhooks/webhook-dispatcher.d.ts.map +1 -0
- package/dist/webhooks/webhook-dispatcher.js +519 -0
- package/dist/webhooks/webhook-dispatcher.js.map +1 -0
- package/docs/COMPLIANCE-SPEC.md +1452 -0
- package/package.json +30 -4
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compliance Dashboard
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified view of compliance status across all regulations.
|
|
5
|
+
* Aggregates data from all compliance components for reporting.
|
|
6
|
+
*
|
|
7
|
+
* Added by Pantheon Security for enterprise compliance support.
|
|
8
|
+
*/
|
|
9
|
+
import { getComplianceLogger } from "./compliance-logger.js";
|
|
10
|
+
import { getConsentManager } from "./consent-manager.js";
|
|
11
|
+
import { getDataInventory } from "./data-inventory.js";
|
|
12
|
+
import { getRetentionEngine } from "./retention-engine.js";
|
|
13
|
+
import { getDataErasureManager } from "./data-erasure.js";
|
|
14
|
+
import { getDSARHandler } from "./dsar-handler.js";
|
|
15
|
+
import { getAlertManager } from "./alert-manager.js";
|
|
16
|
+
import { getBreachDetector } from "./breach-detection.js";
|
|
17
|
+
import { getIncidentManager } from "./incident-manager.js";
|
|
18
|
+
import { getHealthMonitor } from "./health-monitor.js";
|
|
19
|
+
import { getChangeLog } from "./change-log.js";
|
|
20
|
+
import { getPolicyDocManager } from "./policy-docs.js";
|
|
21
|
+
/**
|
|
22
|
+
* Compliance Dashboard class
|
|
23
|
+
*/
|
|
24
|
+
export class ComplianceDashboard {
|
|
25
|
+
static instance;
|
|
26
|
+
constructor() { }
|
|
27
|
+
/**
|
|
28
|
+
* Get singleton instance
|
|
29
|
+
*/
|
|
30
|
+
static getInstance() {
|
|
31
|
+
if (!ComplianceDashboard.instance) {
|
|
32
|
+
ComplianceDashboard.instance = new ComplianceDashboard();
|
|
33
|
+
}
|
|
34
|
+
return ComplianceDashboard.instance;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Generate full dashboard data
|
|
38
|
+
*/
|
|
39
|
+
async generateDashboard() {
|
|
40
|
+
const [health, gdpr, soc2, cssf, security, recentActivity] = await Promise.all([
|
|
41
|
+
this.getHealthSummary(),
|
|
42
|
+
this.getGDPRDashboard(),
|
|
43
|
+
this.getSOC2Dashboard(),
|
|
44
|
+
this.getCSSFDashboard(),
|
|
45
|
+
this.getSecurityDashboard(),
|
|
46
|
+
this.getRecentActivity(),
|
|
47
|
+
]);
|
|
48
|
+
// Determine overall status
|
|
49
|
+
const statuses = [gdpr.status, soc2.status, cssf.status];
|
|
50
|
+
let overallStatus;
|
|
51
|
+
if (statuses.includes("non_compliant")) {
|
|
52
|
+
overallStatus = "non_compliant";
|
|
53
|
+
}
|
|
54
|
+
else if (statuses.includes("at_risk")) {
|
|
55
|
+
overallStatus = "at_risk";
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
overallStatus = "compliant";
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
generated_at: new Date().toISOString(),
|
|
62
|
+
overall_status: overallStatus,
|
|
63
|
+
health,
|
|
64
|
+
gdpr,
|
|
65
|
+
soc2,
|
|
66
|
+
cssf,
|
|
67
|
+
security,
|
|
68
|
+
recent_activity: recentActivity,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get health summary
|
|
73
|
+
*/
|
|
74
|
+
async getHealthSummary() {
|
|
75
|
+
const monitor = getHealthMonitor();
|
|
76
|
+
const status = monitor.getStatus();
|
|
77
|
+
const metrics = monitor.getLastMetrics();
|
|
78
|
+
let componentsUp = 0;
|
|
79
|
+
let componentsDown = 0;
|
|
80
|
+
let componentsDegraded = 0;
|
|
81
|
+
if (metrics) {
|
|
82
|
+
for (const component of metrics.components) {
|
|
83
|
+
if (component.status === "up")
|
|
84
|
+
componentsUp++;
|
|
85
|
+
else if (component.status === "down")
|
|
86
|
+
componentsDown++;
|
|
87
|
+
else
|
|
88
|
+
componentsDegraded++;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
status: status.status,
|
|
93
|
+
uptime_seconds: status.uptime_seconds,
|
|
94
|
+
uptime_formatted: monitor.getUptimeFormatted(),
|
|
95
|
+
last_check: status.last_check,
|
|
96
|
+
components_up: componentsUp,
|
|
97
|
+
components_down: componentsDown,
|
|
98
|
+
components_degraded: componentsDegraded,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get GDPR dashboard
|
|
103
|
+
*/
|
|
104
|
+
async getGDPRDashboard() {
|
|
105
|
+
const consentManager = getConsentManager();
|
|
106
|
+
const dataInventory = getDataInventory();
|
|
107
|
+
const retentionEngine = getRetentionEngine();
|
|
108
|
+
const erasureManager = getDataErasureManager();
|
|
109
|
+
const dsarHandler = getDSARHandler();
|
|
110
|
+
// Get consent data
|
|
111
|
+
const consents = await consentManager.getActiveConsents();
|
|
112
|
+
const validation = await consentManager.validateConsents();
|
|
113
|
+
const now = new Date();
|
|
114
|
+
const validConsents = consents.filter(c => !c.revoked && (!c.expires_at || new Date(c.expires_at) > now)).length;
|
|
115
|
+
const expiredConsents = consents.filter(c => c.revoked || (c.expires_at && new Date(c.expires_at) <= now)).length;
|
|
116
|
+
// Get data inventory
|
|
117
|
+
const inventory = await dataInventory.getAll();
|
|
118
|
+
const exportable = await dataInventory.getExportable();
|
|
119
|
+
const erasable = await dataInventory.getErasable();
|
|
120
|
+
// Get DSAR summary
|
|
121
|
+
const dsarSummary = await dsarHandler.getStatistics();
|
|
122
|
+
// Get erasure requests
|
|
123
|
+
const pendingErasures = await erasureManager.getPendingRequests();
|
|
124
|
+
// Get retention status
|
|
125
|
+
const retentionStatus = await retentionEngine.getStatus();
|
|
126
|
+
// Determine status
|
|
127
|
+
let status = "compliant";
|
|
128
|
+
if (!validation.valid || pendingErasures.length > 5) {
|
|
129
|
+
status = "at_risk";
|
|
130
|
+
}
|
|
131
|
+
// Check if any pending requests
|
|
132
|
+
if (dsarSummary.pending_requests > 5) {
|
|
133
|
+
status = "non_compliant";
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
status,
|
|
137
|
+
consent: {
|
|
138
|
+
valid_consents: validConsents,
|
|
139
|
+
expired_consents: expiredConsents,
|
|
140
|
+
total_purposes: consents.length,
|
|
141
|
+
},
|
|
142
|
+
data_inventory: {
|
|
143
|
+
total_categories: inventory.length,
|
|
144
|
+
exportable: exportable.length,
|
|
145
|
+
erasable: erasable.length,
|
|
146
|
+
},
|
|
147
|
+
data_subjects: {
|
|
148
|
+
pending_dsars: dsarSummary.pending_requests,
|
|
149
|
+
completed_dsars_30d: dsarSummary.completed_requests,
|
|
150
|
+
pending_erasures: pendingErasures.length,
|
|
151
|
+
completed_erasures_30d: 0, // Would need historical tracking
|
|
152
|
+
},
|
|
153
|
+
retention: {
|
|
154
|
+
active_policies: retentionStatus.active_policies,
|
|
155
|
+
items_due_for_deletion: retentionStatus.next_due.length,
|
|
156
|
+
last_cleanup: Object.values(retentionStatus.last_runs)[0],
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get SOC2 dashboard
|
|
162
|
+
*/
|
|
163
|
+
async getSOC2Dashboard() {
|
|
164
|
+
const monitor = getHealthMonitor();
|
|
165
|
+
const incidentManager = getIncidentManager();
|
|
166
|
+
const changeLog = getChangeLog();
|
|
167
|
+
const complianceLogger = getComplianceLogger();
|
|
168
|
+
// Get health metrics
|
|
169
|
+
const metrics = monitor.getLastMetrics();
|
|
170
|
+
const security = metrics?.security || {
|
|
171
|
+
encryption_enabled: false,
|
|
172
|
+
auth_enabled: false,
|
|
173
|
+
cert_pinning_enabled: false,
|
|
174
|
+
open_incidents: 0,
|
|
175
|
+
};
|
|
176
|
+
// Get incident data
|
|
177
|
+
const openIncidents = await incidentManager.getOpenIncidents();
|
|
178
|
+
const lastIncident = openIncidents[0]?.detected_at;
|
|
179
|
+
// Get change data (last 30 days)
|
|
180
|
+
const thirtyDaysAgo = new Date();
|
|
181
|
+
thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
|
|
182
|
+
const changes = await changeLog.getChangesInRange(thirtyDaysAgo, new Date());
|
|
183
|
+
const highImpactChanges = changes.filter(c => c.impact === "high");
|
|
184
|
+
const pendingApprovals = changes.filter(c => c.requires_approval && !c.approved_by);
|
|
185
|
+
// Get logging status
|
|
186
|
+
const loggerStats = await complianceLogger.getStats();
|
|
187
|
+
const integrity = await complianceLogger.verifyIntegrity();
|
|
188
|
+
// Calculate uptime (simplified - would need more sophisticated tracking)
|
|
189
|
+
const uptimePercentage = metrics?.status === "healthy" ? 99.9 :
|
|
190
|
+
metrics?.status === "degraded" ? 95.0 : 90.0;
|
|
191
|
+
// Determine status
|
|
192
|
+
let status = "compliant";
|
|
193
|
+
if (!security.encryption_enabled || openIncidents.length > 0) {
|
|
194
|
+
status = "at_risk";
|
|
195
|
+
}
|
|
196
|
+
if (!integrity.valid || pendingApprovals.length > 10) {
|
|
197
|
+
status = "non_compliant";
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
status,
|
|
201
|
+
availability: {
|
|
202
|
+
current_status: metrics?.status || "unknown",
|
|
203
|
+
uptime_percentage: uptimePercentage,
|
|
204
|
+
last_incident: lastIncident,
|
|
205
|
+
},
|
|
206
|
+
security: {
|
|
207
|
+
encryption_enabled: security.encryption_enabled,
|
|
208
|
+
auth_enabled: security.auth_enabled,
|
|
209
|
+
cert_pinning_enabled: security.cert_pinning_enabled,
|
|
210
|
+
open_incidents: openIncidents.length,
|
|
211
|
+
},
|
|
212
|
+
change_management: {
|
|
213
|
+
changes_30d: changes.length,
|
|
214
|
+
high_impact_changes_30d: highImpactChanges.length,
|
|
215
|
+
pending_approvals: pendingApprovals.length,
|
|
216
|
+
},
|
|
217
|
+
logging: {
|
|
218
|
+
audit_enabled: loggerStats.enabled,
|
|
219
|
+
compliance_logging_enabled: loggerStats.enabled,
|
|
220
|
+
integrity_valid: integrity.valid,
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get CSSF dashboard
|
|
226
|
+
*/
|
|
227
|
+
async getCSSFDashboard() {
|
|
228
|
+
const complianceLogger = getComplianceLogger();
|
|
229
|
+
const incidentManager = getIncidentManager();
|
|
230
|
+
const policyManager = getPolicyDocManager();
|
|
231
|
+
// Get audit trail status
|
|
232
|
+
const loggerStats = await complianceLogger.getStats();
|
|
233
|
+
const integrity = await complianceLogger.verifyIntegrity();
|
|
234
|
+
// Get incident statistics
|
|
235
|
+
const openIncidents = await incidentManager.getOpenIncidents();
|
|
236
|
+
// Get policy status
|
|
237
|
+
const policySummary = await policyManager.getPolicySummary();
|
|
238
|
+
const dueForReview = await policyManager.getPoliciesDueForReview();
|
|
239
|
+
// Calculate MTTR (Mean Time To Respond)
|
|
240
|
+
let mttrHours;
|
|
241
|
+
// Would need incident resolution data for accurate MTTR
|
|
242
|
+
// Determine status
|
|
243
|
+
let status = "compliant";
|
|
244
|
+
if (!integrity.valid || dueForReview.length > 2) {
|
|
245
|
+
status = "at_risk";
|
|
246
|
+
}
|
|
247
|
+
if (!loggerStats.enabled || openIncidents.length > 5) {
|
|
248
|
+
status = "non_compliant";
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
status,
|
|
252
|
+
audit_trail: {
|
|
253
|
+
enabled: loggerStats.enabled,
|
|
254
|
+
retention_years: 7, // CSSF requirement
|
|
255
|
+
total_events: loggerStats.totalEvents,
|
|
256
|
+
integrity_valid: integrity.valid,
|
|
257
|
+
},
|
|
258
|
+
incident_response: {
|
|
259
|
+
documented_procedures: true, // We have incident manager
|
|
260
|
+
open_incidents: openIncidents.length,
|
|
261
|
+
mean_time_to_respond_hours: mttrHours,
|
|
262
|
+
},
|
|
263
|
+
policies: {
|
|
264
|
+
total_policies: policySummary.total_policies,
|
|
265
|
+
enforced_policies: policySummary.enforced_policies,
|
|
266
|
+
due_for_review: policySummary.due_for_review,
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Get security dashboard
|
|
272
|
+
*/
|
|
273
|
+
async getSecurityDashboard() {
|
|
274
|
+
const incidentManager = getIncidentManager();
|
|
275
|
+
const alertManager = getAlertManager();
|
|
276
|
+
const breachDetector = getBreachDetector();
|
|
277
|
+
// Get incident statistics
|
|
278
|
+
const incidentStats = await incidentManager.getStatistics();
|
|
279
|
+
// Get alert statistics
|
|
280
|
+
const alertStats = alertManager.getStats();
|
|
281
|
+
// Get breach detection status
|
|
282
|
+
const breachRules = await breachDetector.getRules();
|
|
283
|
+
const blockedPatterns = breachRules.filter(r => r.actions.includes("block")).length;
|
|
284
|
+
// Determine status
|
|
285
|
+
let status = "secure";
|
|
286
|
+
const openIncidents = incidentStats.by_status.open +
|
|
287
|
+
incidentStats.by_status.investigating;
|
|
288
|
+
if (openIncidents > 0 || alertStats.alerts_this_hour > 0) {
|
|
289
|
+
status = "at_risk";
|
|
290
|
+
}
|
|
291
|
+
if (incidentStats.by_severity.critical > 0) {
|
|
292
|
+
status = "compromised";
|
|
293
|
+
}
|
|
294
|
+
return {
|
|
295
|
+
status,
|
|
296
|
+
incidents: {
|
|
297
|
+
total_incidents: incidentStats.total_incidents,
|
|
298
|
+
open_incidents: incidentStats.open_incidents,
|
|
299
|
+
by_severity: incidentStats.by_severity,
|
|
300
|
+
by_status: incidentStats.by_status,
|
|
301
|
+
by_type: incidentStats.by_type,
|
|
302
|
+
},
|
|
303
|
+
alerts: {
|
|
304
|
+
total_24h: alertStats.alerts_this_hour * 24, // Estimate
|
|
305
|
+
critical_24h: 0, // Not tracked by alert manager
|
|
306
|
+
unacknowledged: 0, // Alert manager doesn't track acknowledgments
|
|
307
|
+
},
|
|
308
|
+
breach_detection: {
|
|
309
|
+
enabled: true,
|
|
310
|
+
active_rules: breachRules.length,
|
|
311
|
+
blocked_patterns: blockedPatterns,
|
|
312
|
+
},
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get recent activity
|
|
317
|
+
*/
|
|
318
|
+
async getRecentActivity() {
|
|
319
|
+
const complianceLogger = getComplianceLogger();
|
|
320
|
+
const changeLog = getChangeLog();
|
|
321
|
+
// Get recent events
|
|
322
|
+
const events = await complianceLogger.getEvents(undefined, undefined, undefined, 10);
|
|
323
|
+
const recentEvents = events.map(e => ({
|
|
324
|
+
timestamp: e.timestamp,
|
|
325
|
+
type: e.category,
|
|
326
|
+
description: e.event_type,
|
|
327
|
+
severity: e.outcome,
|
|
328
|
+
}));
|
|
329
|
+
// Get recent changes
|
|
330
|
+
const changes = await changeLog.getAllChanges(10);
|
|
331
|
+
const recentChanges = changes.map(c => ({
|
|
332
|
+
timestamp: c.timestamp,
|
|
333
|
+
component: c.component,
|
|
334
|
+
setting: c.setting,
|
|
335
|
+
impact: c.impact,
|
|
336
|
+
}));
|
|
337
|
+
// No recent alerts API, return empty
|
|
338
|
+
const recentAlerts = [];
|
|
339
|
+
return {
|
|
340
|
+
recent_events: recentEvents,
|
|
341
|
+
recent_changes: recentChanges,
|
|
342
|
+
recent_alerts: recentAlerts,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Get compliance score (0-100)
|
|
347
|
+
*/
|
|
348
|
+
async getComplianceScore() {
|
|
349
|
+
const dashboard = await this.generateDashboard();
|
|
350
|
+
// Score each regulation
|
|
351
|
+
const gdprScore = this.calculateRegulationScore(dashboard.gdpr.status);
|
|
352
|
+
const soc2Score = this.calculateRegulationScore(dashboard.soc2.status);
|
|
353
|
+
const cssfScore = this.calculateRegulationScore(dashboard.cssf.status);
|
|
354
|
+
// Calculate overall (weighted average)
|
|
355
|
+
const overall = Math.round((gdprScore + soc2Score + cssfScore) / 3);
|
|
356
|
+
// Detailed breakdown
|
|
357
|
+
const breakdown = {
|
|
358
|
+
consent_management: dashboard.gdpr.consent.expired_consents === 0 ? 100 : 70,
|
|
359
|
+
data_inventory: dashboard.gdpr.data_inventory.total_categories > 0 ? 100 : 50,
|
|
360
|
+
dsar_handling: dashboard.gdpr.data_subjects.pending_dsars === 0 ? 100 : 80,
|
|
361
|
+
encryption: dashboard.soc2.security.encryption_enabled ? 100 : 0,
|
|
362
|
+
audit_logging: dashboard.soc2.logging.audit_enabled ? 100 : 0,
|
|
363
|
+
incident_response: dashboard.security.incidents.total_incidents === 0 ? 100 : 60,
|
|
364
|
+
policy_management: dashboard.cssf.policies.due_for_review === 0 ? 100 : 70,
|
|
365
|
+
};
|
|
366
|
+
return {
|
|
367
|
+
overall,
|
|
368
|
+
gdpr: gdprScore,
|
|
369
|
+
soc2: soc2Score,
|
|
370
|
+
cssf: cssfScore,
|
|
371
|
+
breakdown,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Calculate score from status
|
|
376
|
+
*/
|
|
377
|
+
calculateRegulationScore(status) {
|
|
378
|
+
switch (status) {
|
|
379
|
+
case "compliant":
|
|
380
|
+
return 100;
|
|
381
|
+
case "at_risk":
|
|
382
|
+
return 70;
|
|
383
|
+
case "non_compliant":
|
|
384
|
+
return 30;
|
|
385
|
+
default:
|
|
386
|
+
return 0;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Get compliance summary for CLI display
|
|
391
|
+
*/
|
|
392
|
+
async getSummaryForCLI() {
|
|
393
|
+
const dashboard = await this.generateDashboard();
|
|
394
|
+
const score = await this.getComplianceScore();
|
|
395
|
+
const lines = [
|
|
396
|
+
"═══════════════════════════════════════════════════════════════",
|
|
397
|
+
" COMPLIANCE DASHBOARD",
|
|
398
|
+
"═══════════════════════════════════════════════════════════════",
|
|
399
|
+
"",
|
|
400
|
+
` Overall Status: ${this.formatStatus(dashboard.overall_status)}`,
|
|
401
|
+
` Compliance Score: ${score.overall}%`,
|
|
402
|
+
` Generated: ${new Date(dashboard.generated_at).toLocaleString()}`,
|
|
403
|
+
"",
|
|
404
|
+
"───────────────────────────────────────────────────────────────",
|
|
405
|
+
" REGULATION STATUS",
|
|
406
|
+
"───────────────────────────────────────────────────────────────",
|
|
407
|
+
"",
|
|
408
|
+
` GDPR: ${this.formatStatus(dashboard.gdpr.status)} (${score.gdpr}%)`,
|
|
409
|
+
` • Valid Consents: ${dashboard.gdpr.consent.valid_consents}`,
|
|
410
|
+
` • Pending DSARs: ${dashboard.gdpr.data_subjects.pending_dsars}`,
|
|
411
|
+
` • Pending Erasures: ${dashboard.gdpr.data_subjects.pending_erasures}`,
|
|
412
|
+
"",
|
|
413
|
+
` SOC2: ${this.formatStatus(dashboard.soc2.status)} (${score.soc2}%)`,
|
|
414
|
+
` • Encryption: ${dashboard.soc2.security.encryption_enabled ? "Enabled" : "DISABLED"}`,
|
|
415
|
+
` • Audit Logging: ${dashboard.soc2.logging.audit_enabled ? "Enabled" : "DISABLED"}`,
|
|
416
|
+
` • Open Incidents: ${dashboard.soc2.security.open_incidents}`,
|
|
417
|
+
"",
|
|
418
|
+
` CSSF: ${this.formatStatus(dashboard.cssf.status)} (${score.cssf}%)`,
|
|
419
|
+
` • Audit Trail: ${dashboard.cssf.audit_trail.enabled ? "Enabled" : "DISABLED"}`,
|
|
420
|
+
` • Policies: ${dashboard.cssf.policies.total_policies} (${dashboard.cssf.policies.due_for_review} due for review)`,
|
|
421
|
+
"",
|
|
422
|
+
"───────────────────────────────────────────────────────────────",
|
|
423
|
+
" SYSTEM HEALTH",
|
|
424
|
+
"───────────────────────────────────────────────────────────────",
|
|
425
|
+
"",
|
|
426
|
+
` Status: ${this.formatHealthStatus(dashboard.health.status)}`,
|
|
427
|
+
` Uptime: ${dashboard.health.uptime_formatted}`,
|
|
428
|
+
` Components: ${dashboard.health.components_up} up, ${dashboard.health.components_down} down, ${dashboard.health.components_degraded} degraded`,
|
|
429
|
+
"",
|
|
430
|
+
"───────────────────────────────────────────────────────────────",
|
|
431
|
+
" SECURITY",
|
|
432
|
+
"───────────────────────────────────────────────────────────────",
|
|
433
|
+
"",
|
|
434
|
+
` Status: ${this.formatSecurityStatus(dashboard.security.status)}`,
|
|
435
|
+
` Open Incidents: ${dashboard.security.incidents.open_incidents}`,
|
|
436
|
+
` Alerts (24h): ${dashboard.security.alerts.total_24h} (${dashboard.security.alerts.critical_24h} critical)`,
|
|
437
|
+
` Breach Detection Rules: ${dashboard.security.breach_detection.active_rules}`,
|
|
438
|
+
"",
|
|
439
|
+
"═══════════════════════════════════════════════════════════════",
|
|
440
|
+
];
|
|
441
|
+
return lines.join("\n");
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Format compliance status for display
|
|
445
|
+
*/
|
|
446
|
+
formatStatus(status) {
|
|
447
|
+
switch (status) {
|
|
448
|
+
case "compliant":
|
|
449
|
+
return "[COMPLIANT]";
|
|
450
|
+
case "at_risk":
|
|
451
|
+
return "[AT RISK]";
|
|
452
|
+
case "non_compliant":
|
|
453
|
+
return "[NON-COMPLIANT]";
|
|
454
|
+
default:
|
|
455
|
+
return `[${status.toUpperCase()}]`;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Format health status for display
|
|
460
|
+
*/
|
|
461
|
+
formatHealthStatus(status) {
|
|
462
|
+
switch (status) {
|
|
463
|
+
case "healthy":
|
|
464
|
+
return "[HEALTHY]";
|
|
465
|
+
case "degraded":
|
|
466
|
+
return "[DEGRADED]";
|
|
467
|
+
case "unhealthy":
|
|
468
|
+
return "[UNHEALTHY]";
|
|
469
|
+
default:
|
|
470
|
+
return "[UNKNOWN]";
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Format security status for display
|
|
475
|
+
*/
|
|
476
|
+
formatSecurityStatus(status) {
|
|
477
|
+
switch (status) {
|
|
478
|
+
case "secure":
|
|
479
|
+
return "[SECURE]";
|
|
480
|
+
case "at_risk":
|
|
481
|
+
return "[AT RISK]";
|
|
482
|
+
case "compromised":
|
|
483
|
+
return "[COMPROMISED]";
|
|
484
|
+
default:
|
|
485
|
+
return `[${status.toUpperCase()}]`;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
// ============================================
|
|
490
|
+
// SINGLETON ACCESS
|
|
491
|
+
// ============================================
|
|
492
|
+
/**
|
|
493
|
+
* Get the compliance dashboard instance
|
|
494
|
+
*/
|
|
495
|
+
export function getComplianceDashboard() {
|
|
496
|
+
return ComplianceDashboard.getInstance();
|
|
497
|
+
}
|
|
498
|
+
// ============================================
|
|
499
|
+
// CONVENIENCE EXPORTS
|
|
500
|
+
// ============================================
|
|
501
|
+
/**
|
|
502
|
+
* Generate full dashboard data
|
|
503
|
+
*/
|
|
504
|
+
export async function generateDashboard() {
|
|
505
|
+
return getComplianceDashboard().generateDashboard();
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Get compliance score
|
|
509
|
+
*/
|
|
510
|
+
export async function getComplianceScore() {
|
|
511
|
+
return getComplianceDashboard().getComplianceScore();
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Get CLI summary
|
|
515
|
+
*/
|
|
516
|
+
export async function getDashboardCLI() {
|
|
517
|
+
return getComplianceDashboard().getSummaryForCLI();
|
|
518
|
+
}
|
|
519
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/compliance/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Classification System
|
|
3
|
+
*
|
|
4
|
+
* Tags all data by sensitivity level for appropriate handling.
|
|
5
|
+
* Supports GDPR, SOC2, and CSSF compliance requirements.
|
|
6
|
+
*
|
|
7
|
+
* Added by Pantheon Security for enterprise compliance support.
|
|
8
|
+
*/
|
|
9
|
+
import { DataClassification, DataCategory, ClassifiedData, LegalBasis, DataInventoryEntry } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Data Classifier class
|
|
12
|
+
*/
|
|
13
|
+
export declare class DataClassifier {
|
|
14
|
+
private static instance;
|
|
15
|
+
private customClassifications;
|
|
16
|
+
private constructor();
|
|
17
|
+
/**
|
|
18
|
+
* Get singleton instance
|
|
19
|
+
*/
|
|
20
|
+
static getInstance(): DataClassifier;
|
|
21
|
+
/**
|
|
22
|
+
* Classify a data type
|
|
23
|
+
*/
|
|
24
|
+
classify(dataType: string): ClassifiedData | null;
|
|
25
|
+
/**
|
|
26
|
+
* Get the classification level for a data type
|
|
27
|
+
*/
|
|
28
|
+
getClassificationLevel(dataType: string): DataClassification;
|
|
29
|
+
/**
|
|
30
|
+
* Check if data requires encryption
|
|
31
|
+
*/
|
|
32
|
+
requiresEncryption(dataType: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Check if data access requires audit logging
|
|
35
|
+
*/
|
|
36
|
+
requiresAudit(dataType: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Check if data is exportable (for GDPR data portability)
|
|
39
|
+
*/
|
|
40
|
+
isExportable(dataType: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Check if data is erasable (for GDPR right to erasure)
|
|
43
|
+
*/
|
|
44
|
+
isErasable(dataType: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Get legal basis for processing
|
|
47
|
+
*/
|
|
48
|
+
getLegalBasis(dataType: string): LegalBasis;
|
|
49
|
+
/**
|
|
50
|
+
* Get processing purposes
|
|
51
|
+
*/
|
|
52
|
+
getProcessingPurposes(dataType: string): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Get retention policy
|
|
55
|
+
*/
|
|
56
|
+
getRetentionPolicy(dataType: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Register a custom classification
|
|
59
|
+
*/
|
|
60
|
+
registerClassification(dataType: string, classification: ClassifiedData): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get all known data types
|
|
63
|
+
*/
|
|
64
|
+
getAllDataTypes(): string[];
|
|
65
|
+
/**
|
|
66
|
+
* Get data types by classification level
|
|
67
|
+
*/
|
|
68
|
+
getDataTypesByClassification(level: DataClassification): string[];
|
|
69
|
+
/**
|
|
70
|
+
* Get data types by category
|
|
71
|
+
*/
|
|
72
|
+
getDataTypesByCategory(category: DataCategory): string[];
|
|
73
|
+
/**
|
|
74
|
+
* Build a data inventory entry
|
|
75
|
+
*/
|
|
76
|
+
buildInventoryEntry(dataType: string, storageLocation: string): DataInventoryEntry | null;
|
|
77
|
+
/**
|
|
78
|
+
* Parse retention policy to days
|
|
79
|
+
*/
|
|
80
|
+
private parseRetentionDays;
|
|
81
|
+
/**
|
|
82
|
+
* Get human-readable description for data type
|
|
83
|
+
*/
|
|
84
|
+
private getDataTypeDescription;
|
|
85
|
+
/**
|
|
86
|
+
* Validate classification against compliance requirements
|
|
87
|
+
*/
|
|
88
|
+
validateCompliance(dataType: string, regulations: ("GDPR" | "SOC2" | "CSSF")[]): {
|
|
89
|
+
valid: boolean;
|
|
90
|
+
issues: string[];
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get the data classifier instance
|
|
95
|
+
*/
|
|
96
|
+
export declare function getDataClassifier(): DataClassifier;
|
|
97
|
+
/**
|
|
98
|
+
* Check if a data type requires encryption
|
|
99
|
+
*/
|
|
100
|
+
export declare function requiresEncryption(dataType: string): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Check if a data type requires audit logging
|
|
103
|
+
*/
|
|
104
|
+
export declare function requiresAudit(dataType: string): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Get the classification level for a data type
|
|
107
|
+
*/
|
|
108
|
+
export declare function getClassificationLevel(dataType: string): DataClassification;
|
|
109
|
+
/**
|
|
110
|
+
* Check if data is exportable for GDPR
|
|
111
|
+
*/
|
|
112
|
+
export declare function isExportable(dataType: string): boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Check if data can be erased for GDPR
|
|
115
|
+
*/
|
|
116
|
+
export declare function isErasable(dataType: string): boolean;
|
|
117
|
+
//# sourceMappingURL=data-classification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-classification.d.ts","sourceRoot":"","sources":["../../src/compliance/data-classification.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,UAAU,EACV,kBAAkB,EACnB,MAAM,YAAY,CAAC;AA+LpB;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,qBAAqB,CAA0C;IAEvE,OAAO;IAEP;;OAEG;WACW,WAAW,IAAI,cAAc;IAO3C;;OAEG;IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAcxD;;OAEG;IACI,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB;IAKnE;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKpD;;OAEG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK/C;;OAEG;IACI,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK9C;;OAEG;IACI,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK5C;;OAEG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAIlD;;OAEG;IACI,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAIxD;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAKnD;;OAEG;IACI,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI;IAIrF;;OAEG;IACI,eAAe,IAAI,MAAM,EAAE;IAMlC;;OAEG;IACI,4BAA4B,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,EAAE;IAOxE;;OAEG;IACI,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IAO/D;;OAEG;IACI,mBAAmB,CACxB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,kBAAkB,GAAG,IAAI;IAyB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACI,kBAAkB,CACvB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,GACxC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAgDxC;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAE3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|