erosolar-cli 2.1.238 → 2.1.240

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +9 -0
  2. package/dist/contracts/tools.schema.json +3 -1
  3. package/dist/core/agent.d.ts.map +1 -1
  4. package/dist/core/agent.js +5 -1
  5. package/dist/core/agent.js.map +1 -1
  6. package/dist/core/agentOrchestrator.d.ts +4 -0
  7. package/dist/core/agentOrchestrator.d.ts.map +1 -1
  8. package/dist/core/agentOrchestrator.js +58 -6
  9. package/dist/core/agentOrchestrator.js.map +1 -1
  10. package/dist/core/autoExecutionOrchestrator.d.ts +172 -0
  11. package/dist/core/autoExecutionOrchestrator.d.ts.map +1 -0
  12. package/dist/core/autoExecutionOrchestrator.js +591 -0
  13. package/dist/core/autoExecutionOrchestrator.js.map +1 -0
  14. package/dist/core/contextManager.d.ts.map +1 -1
  15. package/dist/core/contextManager.js.map +1 -1
  16. package/dist/core/dualAgentOrchestrator.d.ts +34 -0
  17. package/dist/core/dualAgentOrchestrator.d.ts.map +1 -0
  18. package/dist/core/dualAgentOrchestrator.js +94 -0
  19. package/dist/core/dualAgentOrchestrator.js.map +1 -0
  20. package/dist/core/errors/safetyValidator.d.ts +25 -12
  21. package/dist/core/errors/safetyValidator.d.ts.map +1 -1
  22. package/dist/core/errors/safetyValidator.js +165 -17
  23. package/dist/core/errors/safetyValidator.js.map +1 -1
  24. package/dist/core/governmentProcedures.d.ts +118 -0
  25. package/dist/core/governmentProcedures.d.ts.map +1 -0
  26. package/dist/core/governmentProcedures.js +912 -0
  27. package/dist/core/governmentProcedures.js.map +1 -0
  28. package/dist/core/infrastructureTemplates.d.ts +123 -0
  29. package/dist/core/infrastructureTemplates.d.ts.map +1 -0
  30. package/dist/core/infrastructureTemplates.js +1326 -0
  31. package/dist/core/infrastructureTemplates.js.map +1 -0
  32. package/dist/core/integrityVerification.d.ts +250 -0
  33. package/dist/core/integrityVerification.d.ts.map +1 -0
  34. package/dist/core/integrityVerification.js +616 -0
  35. package/dist/core/integrityVerification.js.map +1 -0
  36. package/dist/core/orchestration.d.ts +534 -0
  37. package/dist/core/orchestration.d.ts.map +1 -0
  38. package/dist/core/orchestration.js +2009 -0
  39. package/dist/core/orchestration.js.map +1 -0
  40. package/dist/core/persistentObjectiveStore.d.ts +292 -0
  41. package/dist/core/persistentObjectiveStore.d.ts.map +1 -0
  42. package/dist/core/persistentObjectiveStore.js +613 -0
  43. package/dist/core/persistentObjectiveStore.js.map +1 -0
  44. package/dist/core/preferences.js +1 -1
  45. package/dist/core/preferences.js.map +1 -1
  46. package/dist/core/reliabilityPrompt.d.ts.map +1 -1
  47. package/dist/core/reliabilityPrompt.js +3 -0
  48. package/dist/core/reliabilityPrompt.js.map +1 -1
  49. package/dist/core/securityDeliverableGenerator.d.ts +292 -0
  50. package/dist/core/securityDeliverableGenerator.d.ts.map +1 -0
  51. package/dist/core/securityDeliverableGenerator.js +1590 -0
  52. package/dist/core/securityDeliverableGenerator.js.map +1 -0
  53. package/dist/core/taskCompletionDetector.d.ts.map +1 -1
  54. package/dist/core/taskCompletionDetector.js +4 -1
  55. package/dist/core/taskCompletionDetector.js.map +1 -1
  56. package/dist/shell/autoExecutor.d.ts.map +1 -1
  57. package/dist/shell/autoExecutor.js +32 -3
  58. package/dist/shell/autoExecutor.js.map +1 -1
  59. package/dist/shell/interactiveShell.d.ts +9 -0
  60. package/dist/shell/interactiveShell.d.ts.map +1 -1
  61. package/dist/shell/interactiveShell.js +282 -190
  62. package/dist/shell/interactiveShell.js.map +1 -1
  63. package/dist/tools/bashTools.d.ts +3 -5
  64. package/dist/tools/bashTools.d.ts.map +1 -1
  65. package/dist/tools/bashTools.js +259 -161
  66. package/dist/tools/bashTools.js.map +1 -1
  67. package/dist/tools/tao/index.d.ts +4 -4
  68. package/dist/tools/tao/index.d.ts.map +1 -1
  69. package/dist/tools/tao/index.js +15 -5
  70. package/dist/tools/tao/index.js.map +1 -1
  71. package/dist/tools/tao/rl.d.ts +164 -0
  72. package/dist/tools/tao/rl.d.ts.map +1 -0
  73. package/dist/tools/tao/rl.js +2998 -0
  74. package/dist/tools/tao/rl.js.map +1 -0
  75. package/dist/tools/taoTools.d.ts +2 -2
  76. package/dist/tools/taoTools.d.ts.map +1 -1
  77. package/dist/tools/taoTools.js +103 -20
  78. package/dist/tools/taoTools.js.map +1 -1
  79. package/dist/ui/PromptController.d.ts +3 -0
  80. package/dist/ui/PromptController.d.ts.map +1 -1
  81. package/dist/ui/PromptController.js +3 -0
  82. package/dist/ui/PromptController.js.map +1 -1
  83. package/dist/ui/UnifiedUIRenderer.d.ts +4 -0
  84. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
  85. package/dist/ui/UnifiedUIRenderer.js +37 -6
  86. package/dist/ui/UnifiedUIRenderer.js.map +1 -1
  87. package/dist/ui/display.d.ts +9 -1
  88. package/dist/ui/display.d.ts.map +1 -1
  89. package/dist/ui/display.js +66 -9
  90. package/dist/ui/display.js.map +1 -1
  91. package/dist/ui/shortcutsHelp.d.ts.map +1 -1
  92. package/dist/ui/shortcutsHelp.js +1 -0
  93. package/dist/ui/shortcutsHelp.js.map +1 -1
  94. package/package.json +3 -2
  95. package/dist/capabilities/askUserCapability.d.ts +0 -14
  96. package/dist/capabilities/askUserCapability.d.ts.map +0 -1
  97. package/dist/capabilities/askUserCapability.js +0 -134
  98. package/dist/capabilities/askUserCapability.js.map +0 -1
  99. package/dist/capabilities/codeGenerationCapability.d.ts +0 -13
  100. package/dist/capabilities/codeGenerationCapability.d.ts.map +0 -1
  101. package/dist/capabilities/codeGenerationCapability.js +0 -25
  102. package/dist/capabilities/codeGenerationCapability.js.map +0 -1
  103. package/dist/capabilities/performanceMonitoringCapability.d.ts +0 -108
  104. package/dist/capabilities/performanceMonitoringCapability.d.ts.map +0 -1
  105. package/dist/capabilities/performanceMonitoringCapability.js +0 -176
  106. package/dist/capabilities/performanceMonitoringCapability.js.map +0 -1
  107. package/dist/capabilities/todoCapability.d.ts +0 -19
  108. package/dist/capabilities/todoCapability.d.ts.map +0 -1
  109. package/dist/capabilities/todoCapability.js +0 -170
  110. package/dist/capabilities/todoCapability.js.map +0 -1
  111. package/dist/core/baseToolFactory.d.ts +0 -187
  112. package/dist/core/baseToolFactory.d.ts.map +0 -1
  113. package/dist/core/baseToolFactory.js +0 -352
  114. package/dist/core/baseToolFactory.js.map +0 -1
  115. package/dist/core/intelligentSummarizer.d.ts +0 -79
  116. package/dist/core/intelligentSummarizer.d.ts.map +0 -1
  117. package/dist/core/intelligentSummarizer.js +0 -273
  118. package/dist/core/intelligentSummarizer.js.map +0 -1
  119. package/dist/core/memorySystem.d.ts +0 -67
  120. package/dist/core/memorySystem.d.ts.map +0 -1
  121. package/dist/core/memorySystem.js +0 -334
  122. package/dist/core/memorySystem.js.map +0 -1
  123. package/dist/core/outputStyles.d.ts +0 -48
  124. package/dist/core/outputStyles.d.ts.map +0 -1
  125. package/dist/core/outputStyles.js +0 -270
  126. package/dist/core/outputStyles.js.map +0 -1
  127. package/dist/core/toolPatternAnalyzer.d.ts +0 -87
  128. package/dist/core/toolPatternAnalyzer.d.ts.map +0 -1
  129. package/dist/core/toolPatternAnalyzer.js +0 -272
  130. package/dist/core/toolPatternAnalyzer.js.map +0 -1
  131. package/dist/tools/backgroundBashTools.d.ts +0 -21
  132. package/dist/tools/backgroundBashTools.d.ts.map +0 -1
  133. package/dist/tools/backgroundBashTools.js +0 -215
  134. package/dist/tools/backgroundBashTools.js.map +0 -1
  135. package/dist/tools/code-quality-dashboard.d.ts +0 -57
  136. package/dist/tools/code-quality-dashboard.d.ts.map +0 -1
  137. package/dist/tools/code-quality-dashboard.js +0 -218
  138. package/dist/tools/code-quality-dashboard.js.map +0 -1
  139. package/dist/tools/tao/rlEngine.d.ts +0 -40
  140. package/dist/tools/tao/rlEngine.d.ts.map +0 -1
  141. package/dist/tools/tao/rlEngine.js +0 -237
  142. package/dist/tools/tao/rlEngine.js.map +0 -1
@@ -0,0 +1,616 @@
1
+ /**
2
+ * Cryptographic Integrity Verification System
3
+ *
4
+ * Purpose: Legal evidence preservation and integrity verification for
5
+ * pro se litigation against technology companies (Apple, Google, Meta, etc.)
6
+ *
7
+ * Capabilities:
8
+ * - Cryptographic hash chains for tamper-evident logging
9
+ * - Digital signatures with timestamping
10
+ * - Evidence collection from tech company products/APIs
11
+ * - Chain of custody documentation
12
+ * - Legal exhibit generation with integrity proofs
13
+ * - RFC 3161 compliant timestamping
14
+ *
15
+ * Use Cases:
16
+ * - Fraud documentation
17
+ * - Terms of service violations
18
+ * - Privacy breaches
19
+ * - Data manipulation evidence
20
+ * - Corporate misconduct records
21
+ */
22
+ import * as crypto from 'node:crypto';
23
+ import * as fs from 'node:fs/promises';
24
+ import * as fsSync from 'node:fs';
25
+ import * as path from 'node:path';
26
+ // ═══════════════════════════════════════════════════════════════════════════════
27
+ // TECH COMPANY REGISTRY
28
+ // ═══════════════════════════════════════════════════════════════════════════════
29
+ export const TECH_COMPANY_TARGETS = {
30
+ apple: {
31
+ company: 'Apple Inc.',
32
+ products: [
33
+ { name: 'iOS', type: 'operating_system', dataTypes: ['telemetry', 'location', 'usage', 'health'] },
34
+ { name: 'macOS', type: 'operating_system', dataTypes: ['telemetry', 'usage', 'diagnostics'] },
35
+ { name: 'iCloud', type: 'cloud_service', dataTypes: ['documents', 'photos', 'backups', 'keychain'] },
36
+ { name: 'App Store', type: 'marketplace', dataTypes: ['purchases', 'reviews', 'developer_data'] },
37
+ { name: 'Apple Pay', type: 'payment', dataTypes: ['transactions', 'merchant_data'] },
38
+ { name: 'Siri', type: 'ai_assistant', dataTypes: ['voice_recordings', 'queries', 'responses'] },
39
+ { name: 'Apple Music', type: 'streaming', dataTypes: ['listening_history', 'preferences'] },
40
+ { name: 'Apple Maps', type: 'mapping', dataTypes: ['location_history', 'searches', 'routes'] },
41
+ { name: 'Safari', type: 'browser', dataTypes: ['browsing_history', 'bookmarks', 'passwords'] },
42
+ { name: 'Health', type: 'health_data', dataTypes: ['medical_records', 'fitness', 'vitals'] },
43
+ ],
44
+ corporateInfo: {
45
+ legalName: 'Apple Inc.',
46
+ headquarters: 'One Apple Park Way, Cupertino, CA 95014',
47
+ registeredAgent: 'CT Corporation System',
48
+ secFilings: 'CIK 0000320193',
49
+ incorporationState: 'California',
50
+ },
51
+ },
52
+ google: {
53
+ company: 'Google LLC / Alphabet Inc.',
54
+ products: [
55
+ { name: 'Search', type: 'search_engine', dataTypes: ['queries', 'clicks', 'personalization'] },
56
+ { name: 'Gmail', type: 'email', dataTypes: ['emails', 'contacts', 'attachments'] },
57
+ { name: 'Google Drive', type: 'cloud_storage', dataTypes: ['documents', 'sharing', 'activity'] },
58
+ { name: 'YouTube', type: 'video_platform', dataTypes: ['watch_history', 'comments', 'uploads'] },
59
+ { name: 'Google Maps', type: 'mapping', dataTypes: ['location_history', 'reviews', 'timeline'] },
60
+ { name: 'Android', type: 'operating_system', dataTypes: ['telemetry', 'apps', 'location', 'contacts'] },
61
+ { name: 'Chrome', type: 'browser', dataTypes: ['browsing_history', 'passwords', 'autofill'] },
62
+ { name: 'Google Ads', type: 'advertising', dataTypes: ['ad_targeting', 'conversions', 'audiences'] },
63
+ { name: 'Google Assistant', type: 'ai_assistant', dataTypes: ['voice_recordings', 'commands'] },
64
+ { name: 'Google Photos', type: 'photo_storage', dataTypes: ['photos', 'face_recognition', 'location'] },
65
+ { name: 'Google Pay', type: 'payment', dataTypes: ['transactions', 'cards', 'rewards'] },
66
+ { name: 'Fitbit', type: 'wearable', dataTypes: ['health_data', 'activity', 'sleep'] },
67
+ { name: 'Nest', type: 'smart_home', dataTypes: ['camera_footage', 'audio', 'presence'] },
68
+ ],
69
+ corporateInfo: {
70
+ legalName: 'Google LLC (subsidiary of Alphabet Inc.)',
71
+ headquarters: '1600 Amphitheatre Parkway, Mountain View, CA 94043',
72
+ registeredAgent: 'Corporation Service Company',
73
+ secFilings: 'CIK 0001652044 (Alphabet)',
74
+ incorporationState: 'Delaware (Alphabet), California (Google LLC)',
75
+ },
76
+ },
77
+ meta: {
78
+ company: 'Meta Platforms, Inc.',
79
+ products: [
80
+ { name: 'Facebook', type: 'social_network', dataTypes: ['posts', 'messages', 'friends', 'activity'] },
81
+ { name: 'Instagram', type: 'social_network', dataTypes: ['posts', 'stories', 'messages', 'followers'] },
82
+ { name: 'WhatsApp', type: 'messaging', dataTypes: ['messages', 'calls', 'status', 'contacts'] },
83
+ { name: 'Messenger', type: 'messaging', dataTypes: ['messages', 'calls', 'payments'] },
84
+ { name: 'Meta Quest', type: 'vr_platform', dataTypes: ['usage', 'movements', 'social_vr'] },
85
+ { name: 'Meta Ads', type: 'advertising', dataTypes: ['targeting', 'conversions', 'pixel_data'] },
86
+ { name: 'Threads', type: 'social_network', dataTypes: ['posts', 'followers', 'engagement'] },
87
+ ],
88
+ corporateInfo: {
89
+ legalName: 'Meta Platforms, Inc.',
90
+ headquarters: '1 Hacker Way, Menlo Park, CA 94025',
91
+ registeredAgent: 'Corporation Service Company',
92
+ secFilings: 'CIK 0001326801',
93
+ incorporationState: 'Delaware',
94
+ },
95
+ },
96
+ microsoft: {
97
+ company: 'Microsoft Corporation',
98
+ products: [
99
+ { name: 'Windows', type: 'operating_system', dataTypes: ['telemetry', 'diagnostics', 'activity'] },
100
+ { name: 'Office 365', type: 'productivity', dataTypes: ['documents', 'emails', 'calendar'] },
101
+ { name: 'Azure', type: 'cloud_platform', dataTypes: ['resources', 'logs', 'configurations'] },
102
+ { name: 'LinkedIn', type: 'social_network', dataTypes: ['profile', 'connections', 'activity'] },
103
+ { name: 'GitHub', type: 'code_hosting', dataTypes: ['repositories', 'activity', 'contributions'] },
104
+ { name: 'Xbox', type: 'gaming', dataTypes: ['gameplay', 'achievements', 'social'] },
105
+ { name: 'Bing', type: 'search_engine', dataTypes: ['queries', 'clicks', 'chat_history'] },
106
+ { name: 'Teams', type: 'collaboration', dataTypes: ['messages', 'calls', 'meetings'] },
107
+ { name: 'OneDrive', type: 'cloud_storage', dataTypes: ['files', 'sharing', 'activity'] },
108
+ { name: 'Outlook', type: 'email', dataTypes: ['emails', 'calendar', 'contacts'] },
109
+ { name: 'Edge', type: 'browser', dataTypes: ['browsing_history', 'passwords', 'collections'] },
110
+ { name: 'Copilot', type: 'ai_assistant', dataTypes: ['prompts', 'responses', 'context'] },
111
+ ],
112
+ corporateInfo: {
113
+ legalName: 'Microsoft Corporation',
114
+ headquarters: 'One Microsoft Way, Redmond, WA 98052',
115
+ registeredAgent: 'Corporation Service Company',
116
+ secFilings: 'CIK 0000789019',
117
+ incorporationState: 'Washington',
118
+ },
119
+ },
120
+ amazon: {
121
+ company: 'Amazon.com, Inc.',
122
+ products: [
123
+ { name: 'Amazon.com', type: 'ecommerce', dataTypes: ['orders', 'browsing', 'reviews', 'wishlist'] },
124
+ { name: 'AWS', type: 'cloud_platform', dataTypes: ['resources', 'logs', 'billing'] },
125
+ { name: 'Prime Video', type: 'streaming', dataTypes: ['watch_history', 'preferences'] },
126
+ { name: 'Alexa', type: 'ai_assistant', dataTypes: ['voice_recordings', 'commands', 'routines'] },
127
+ { name: 'Ring', type: 'smart_home', dataTypes: ['video', 'events', 'sharing'] },
128
+ { name: 'Kindle', type: 'ereader', dataTypes: ['books', 'highlights', 'reading_progress'] },
129
+ { name: 'Twitch', type: 'streaming', dataTypes: ['watch_history', 'chat', 'subscriptions'] },
130
+ { name: 'Amazon Music', type: 'streaming', dataTypes: ['listening_history', 'playlists'] },
131
+ { name: 'Whole Foods', type: 'retail', dataTypes: ['purchases', 'prime_benefits'] },
132
+ ],
133
+ corporateInfo: {
134
+ legalName: 'Amazon.com, Inc.',
135
+ headquarters: '410 Terry Avenue North, Seattle, WA 98109',
136
+ registeredAgent: 'Corporation Service Company',
137
+ secFilings: 'CIK 0001018724',
138
+ incorporationState: 'Delaware',
139
+ },
140
+ },
141
+ };
142
+ // ═══════════════════════════════════════════════════════════════════════════════
143
+ // INTEGRITY VERIFICATION ENGINE
144
+ // ═══════════════════════════════════════════════════════════════════════════════
145
+ export class IntegrityVerificationEngine {
146
+ chains = new Map();
147
+ storageDir;
148
+ algorithm;
149
+ privateKey;
150
+ publicKey;
151
+ constructor(options) {
152
+ this.storageDir = options.storageDir;
153
+ this.algorithm = options.algorithm || 'sha256';
154
+ if (options.keyPair) {
155
+ this.privateKey = crypto.createPrivateKey(options.keyPair.privateKey);
156
+ this.publicKey = crypto.createPublicKey(options.keyPair.publicKey);
157
+ }
158
+ }
159
+ // ─────────────────────────────────────────────────────────────────────────────
160
+ // Hash Chain Management
161
+ // ─────────────────────────────────────────────────────────────────────────────
162
+ async createChain(id) {
163
+ const chainId = id || crypto.randomUUID();
164
+ const now = new Date().toISOString();
165
+ const chain = {
166
+ id: chainId,
167
+ created: now,
168
+ lastModified: now,
169
+ algorithm: this.algorithm,
170
+ records: [],
171
+ merkleTree: { root: '', levels: [], leafCount: 0 },
172
+ chainIntegrity: true,
173
+ };
174
+ this.chains.set(chainId, chain);
175
+ await this.persistChain(chain);
176
+ return chain;
177
+ }
178
+ async addRecord(chainId, content, metadata) {
179
+ const chain = this.chains.get(chainId);
180
+ if (!chain) {
181
+ throw new Error(`Chain not found: ${chainId}`);
182
+ }
183
+ const recordId = crypto.randomUUID();
184
+ const timestamp = new Date().toISOString();
185
+ const lastRecord = chain.records[chain.records.length - 1];
186
+ const previousHash = lastRecord
187
+ ? lastRecord.contentHash
188
+ : this.hash('GENESIS');
189
+ const contentHash = this.hash(JSON.stringify(content));
190
+ const record = {
191
+ id: recordId,
192
+ timestamp,
193
+ previousHash,
194
+ contentHash,
195
+ merkleRoot: '', // Updated after merkle tree rebuild
196
+ metadata,
197
+ content,
198
+ };
199
+ // Sign the record if we have a private key
200
+ if (this.privateKey) {
201
+ record.signature = this.signData(JSON.stringify({
202
+ id: record.id,
203
+ timestamp: record.timestamp,
204
+ previousHash: record.previousHash,
205
+ contentHash: record.contentHash,
206
+ }));
207
+ }
208
+ chain.records.push(record);
209
+ chain.lastModified = timestamp;
210
+ // Rebuild merkle tree
211
+ this.rebuildMerkleTree(chain);
212
+ // Update merkle root in record
213
+ record.merkleRoot = chain.merkleTree.root;
214
+ await this.persistChain(chain);
215
+ return record;
216
+ }
217
+ // ─────────────────────────────────────────────────────────────────────────────
218
+ // Cryptographic Operations
219
+ // ─────────────────────────────────────────────────────────────────────────────
220
+ hash(data) {
221
+ return crypto.createHash(this.algorithm).update(data).digest('hex');
222
+ }
223
+ signData(data) {
224
+ if (!this.privateKey) {
225
+ throw new Error('No private key configured for signing');
226
+ }
227
+ const sign = crypto.createSign('SHA256');
228
+ sign.update(data);
229
+ return sign.sign(this.privateKey, 'hex');
230
+ }
231
+ verifySignature(data, signature, publicKey) {
232
+ const key = publicKey
233
+ ? crypto.createPublicKey(publicKey)
234
+ : this.publicKey;
235
+ if (!key) {
236
+ throw new Error('No public key available for verification');
237
+ }
238
+ const verify = crypto.createVerify('SHA256');
239
+ verify.update(data);
240
+ return verify.verify(key, signature, 'hex');
241
+ }
242
+ rebuildMerkleTree(chain) {
243
+ if (chain.records.length === 0) {
244
+ chain.merkleTree = { root: '', levels: [], leafCount: 0 };
245
+ return;
246
+ }
247
+ // Leaf level - hash of each record
248
+ const leaves = chain.records.map(r => this.hash(r.contentHash));
249
+ const levels = [leaves];
250
+ // Build tree bottom-up
251
+ let currentLevel = leaves;
252
+ while (currentLevel.length > 1) {
253
+ const nextLevel = [];
254
+ for (let i = 0; i < currentLevel.length; i += 2) {
255
+ const left = currentLevel[i];
256
+ const right = currentLevel[i + 1];
257
+ if (right !== undefined) {
258
+ nextLevel.push(this.hash(left + right));
259
+ }
260
+ else {
261
+ // Odd number of nodes - promote the last one
262
+ nextLevel.push(left);
263
+ }
264
+ }
265
+ levels.push(nextLevel);
266
+ currentLevel = nextLevel;
267
+ }
268
+ chain.merkleTree = {
269
+ root: currentLevel[0] ?? '',
270
+ levels,
271
+ leafCount: leaves.length,
272
+ };
273
+ }
274
+ // ─────────────────────────────────────────────────────────────────────────────
275
+ // Verification Operations
276
+ // ─────────────────────────────────────────────────────────────────────────────
277
+ verifyChainIntegrity(chainId) {
278
+ const chain = this.chains.get(chainId);
279
+ if (!chain) {
280
+ return { valid: false, errors: ['Chain not found'], verifiedRecords: 0 };
281
+ }
282
+ const errors = [];
283
+ let verifiedRecords = 0;
284
+ for (let i = 0; i < chain.records.length; i++) {
285
+ const record = chain.records[i];
286
+ // Verify content hash
287
+ const computedHash = this.hash(JSON.stringify(record.content));
288
+ if (computedHash !== record.contentHash) {
289
+ errors.push(`Record ${record.id}: Content hash mismatch`);
290
+ continue;
291
+ }
292
+ // Verify chain linkage
293
+ if (i === 0) {
294
+ if (record.previousHash !== this.hash('GENESIS')) {
295
+ errors.push(`Record ${record.id}: Invalid genesis link`);
296
+ continue;
297
+ }
298
+ }
299
+ else {
300
+ const prevRecord = chain.records[i - 1];
301
+ if (record.previousHash !== prevRecord.contentHash) {
302
+ errors.push(`Record ${record.id}: Chain link broken`);
303
+ continue;
304
+ }
305
+ }
306
+ // Verify signature if present
307
+ if (record.signature && this.publicKey) {
308
+ const signedData = JSON.stringify({
309
+ id: record.id,
310
+ timestamp: record.timestamp,
311
+ previousHash: record.previousHash,
312
+ contentHash: record.contentHash,
313
+ });
314
+ if (!this.verifySignature(signedData, record.signature)) {
315
+ errors.push(`Record ${record.id}: Invalid signature`);
316
+ continue;
317
+ }
318
+ }
319
+ verifiedRecords++;
320
+ }
321
+ // Verify merkle tree
322
+ this.rebuildMerkleTree(chain);
323
+ const lastRecord = chain.records[chain.records.length - 1];
324
+ if (lastRecord && lastRecord.merkleRoot !== chain.merkleTree.root) {
325
+ errors.push('Merkle tree root mismatch');
326
+ }
327
+ chain.chainIntegrity = errors.length === 0;
328
+ return {
329
+ valid: errors.length === 0,
330
+ errors,
331
+ verifiedRecords,
332
+ };
333
+ }
334
+ generateMerkleProof(chainId, recordId) {
335
+ const chain = this.chains.get(chainId);
336
+ if (!chain)
337
+ return null;
338
+ const recordIndex = chain.records.findIndex(r => r.id === recordId);
339
+ if (recordIndex === -1)
340
+ return null;
341
+ const record = chain.records[recordIndex];
342
+ const leafHash = this.hash(record.contentHash);
343
+ const siblings = [];
344
+ let index = recordIndex;
345
+ for (let level = 0; level < chain.merkleTree.levels.length - 1; level++) {
346
+ const levelNodes = chain.merkleTree.levels[level];
347
+ const isLeft = index % 2 === 0;
348
+ const siblingIndex = isLeft ? index + 1 : index - 1;
349
+ const siblingHash = levelNodes[siblingIndex];
350
+ if (siblingHash !== undefined) {
351
+ siblings.push({
352
+ position: isLeft ? 'right' : 'left',
353
+ hash: siblingHash,
354
+ });
355
+ }
356
+ index = Math.floor(index / 2);
357
+ }
358
+ return {
359
+ recordId,
360
+ leafHash,
361
+ siblings,
362
+ rootHash: chain.merkleTree.root,
363
+ };
364
+ }
365
+ verifyMerkleProof(proof) {
366
+ let currentHash = proof.leafHash;
367
+ for (const sibling of proof.siblings) {
368
+ if (sibling.position === 'left') {
369
+ currentHash = this.hash(sibling.hash + currentHash);
370
+ }
371
+ else {
372
+ currentHash = this.hash(currentHash + sibling.hash);
373
+ }
374
+ }
375
+ return currentHash === proof.rootHash;
376
+ }
377
+ // ─────────────────────────────────────────────────────────────────────────────
378
+ // Timestamping
379
+ // ─────────────────────────────────────────────────────────────────────────────
380
+ createTimestamp(hash) {
381
+ const nonce = crypto.randomBytes(16).toString('hex');
382
+ const timestamp = new Date().toISOString();
383
+ const token = {
384
+ timestamp,
385
+ nonce,
386
+ hash,
387
+ algorithm: this.algorithm,
388
+ };
389
+ // Self-sign if we have a key
390
+ if (this.privateKey) {
391
+ token.signature = this.signData(JSON.stringify({
392
+ timestamp: token.timestamp,
393
+ nonce: token.nonce,
394
+ hash: token.hash,
395
+ algorithm: token.algorithm,
396
+ }));
397
+ }
398
+ return token;
399
+ }
400
+ // ─────────────────────────────────────────────────────────────────────────────
401
+ // Evidence Collection
402
+ // ─────────────────────────────────────────────────────────────────────────────
403
+ async collectEvidence(params) {
404
+ const isBuffer = Buffer.isBuffer(params.content);
405
+ const data = isBuffer
406
+ ? params.content.toString('base64')
407
+ : params.content;
408
+ const encoding = isBuffer ? 'base64' : 'utf8';
409
+ const originalSize = isBuffer
410
+ ? params.content.length
411
+ : Buffer.byteLength(params.content);
412
+ const evidenceContent = {
413
+ type: params.evidenceType,
414
+ encoding,
415
+ data,
416
+ originalSize,
417
+ mimeType: params.mimeType,
418
+ sourceUrl: params.sourceUrl,
419
+ captureMethod: params.captureMethod,
420
+ };
421
+ const metadata = {
422
+ collector: params.collector,
423
+ target: params.target,
424
+ evidenceType: params.evidenceType,
425
+ legalBasis: params.legalBasis,
426
+ jurisdiction: params.jurisdiction,
427
+ caseReference: params.caseReference,
428
+ notes: params.notes,
429
+ };
430
+ return this.addRecord(params.chainId, evidenceContent, metadata);
431
+ }
432
+ // ─────────────────────────────────────────────────────────────────────────────
433
+ // Legal Exhibit Generation
434
+ // ─────────────────────────────────────────────────────────────────────────────
435
+ async generateExhibit(params) {
436
+ const chain = this.chains.get(params.chainId);
437
+ if (!chain) {
438
+ throw new Error(`Chain not found: ${params.chainId}`);
439
+ }
440
+ const recordIds = params.recordIds || chain.records.map(r => r.id);
441
+ const records = chain.records.filter(r => recordIds.includes(r.id));
442
+ // Generate merkle proofs for each record
443
+ const merkleProofs = [];
444
+ for (const record of records) {
445
+ const proof = this.generateMerkleProof(params.chainId, record.id);
446
+ if (proof) {
447
+ merkleProofs.push(proof);
448
+ }
449
+ }
450
+ // Create timestamps for the exhibit
451
+ const timestamps = [
452
+ this.createTimestamp(chain.merkleTree.root),
453
+ ];
454
+ // Collect signatures
455
+ const signatures = records
456
+ .filter(r => r.signature)
457
+ .map(r => ({
458
+ signer: r.metadata.collector,
459
+ timestamp: r.timestamp,
460
+ algorithm: 'SHA256withRSA',
461
+ signature: r.signature,
462
+ }));
463
+ const integrityProof = {
464
+ rootHash: chain.merkleTree.root,
465
+ algorithm: this.algorithm,
466
+ merkleProofs,
467
+ timestamps,
468
+ signatures,
469
+ };
470
+ // Generate chain of custody
471
+ const chainOfCustody = [
472
+ {
473
+ timestamp: chain.created,
474
+ action: 'created',
475
+ actor: 'system',
476
+ description: 'Evidence chain created',
477
+ hash: this.hash('GENESIS'),
478
+ },
479
+ ...records.map(r => ({
480
+ timestamp: r.timestamp,
481
+ action: 'created',
482
+ actor: r.metadata.collector,
483
+ description: `Evidence collected: ${r.metadata.evidenceType}`,
484
+ hash: r.contentHash,
485
+ })),
486
+ {
487
+ timestamp: new Date().toISOString(),
488
+ action: 'exported',
489
+ actor: 'system',
490
+ description: `Legal exhibit ${params.exhibitNumber} generated`,
491
+ hash: chain.merkleTree.root,
492
+ },
493
+ ];
494
+ const exhibit = {
495
+ exhibitNumber: params.exhibitNumber,
496
+ title: params.title,
497
+ description: params.description,
498
+ chainId: params.chainId,
499
+ recordIds,
500
+ integrityProof,
501
+ chainOfCustody,
502
+ generated: new Date().toISOString(),
503
+ format: params.format || 'json',
504
+ };
505
+ return exhibit;
506
+ }
507
+ // ─────────────────────────────────────────────────────────────────────────────
508
+ // Export and Persistence
509
+ // ─────────────────────────────────────────────────────────────────────────────
510
+ async persistChain(chain) {
511
+ const chainDir = path.join(this.storageDir, 'chains', chain.id);
512
+ await fs.mkdir(chainDir, { recursive: true });
513
+ // Write chain metadata
514
+ await fs.writeFile(path.join(chainDir, 'chain.json'), JSON.stringify(chain, null, 2));
515
+ // Write individual records
516
+ const recordsDir = path.join(chainDir, 'records');
517
+ await fs.mkdir(recordsDir, { recursive: true });
518
+ for (const record of chain.records) {
519
+ await fs.writeFile(path.join(recordsDir, `${record.id}.json`), JSON.stringify(record, null, 2));
520
+ }
521
+ }
522
+ async loadChain(chainId) {
523
+ try {
524
+ const chainPath = path.join(this.storageDir, 'chains', chainId, 'chain.json');
525
+ const data = await fs.readFile(chainPath, 'utf8');
526
+ const chain = JSON.parse(data);
527
+ this.chains.set(chainId, chain);
528
+ return chain;
529
+ }
530
+ catch {
531
+ return null;
532
+ }
533
+ }
534
+ async exportChainBundle(chainId) {
535
+ const chain = this.chains.get(chainId);
536
+ if (!chain) {
537
+ throw new Error(`Chain not found: ${chainId}`);
538
+ }
539
+ const verification = this.verifyChainIntegrity(chainId);
540
+ return {
541
+ chain,
542
+ exhibits: [],
543
+ verification,
544
+ };
545
+ }
546
+ // ─────────────────────────────────────────────────────────────────────────────
547
+ // Key Management
548
+ // ─────────────────────────────────────────────────────────────────────────────
549
+ static generateKeyPair() {
550
+ const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {
551
+ modulusLength: 4096,
552
+ publicKeyEncoding: {
553
+ type: 'spki',
554
+ format: 'pem',
555
+ },
556
+ privateKeyEncoding: {
557
+ type: 'pkcs8',
558
+ format: 'pem',
559
+ },
560
+ });
561
+ return { privateKey, publicKey };
562
+ }
563
+ getPublicKey() {
564
+ if (!this.publicKey)
565
+ return null;
566
+ return this.publicKey.export({ type: 'spki', format: 'pem' });
567
+ }
568
+ }
569
+ // ═══════════════════════════════════════════════════════════════════════════════
570
+ // CONVENIENCE FUNCTIONS
571
+ // ═══════════════════════════════════════════════════════════════════════════════
572
+ export function hashFile(filePath, algorithm = 'sha256') {
573
+ const content = fsSync.readFileSync(filePath);
574
+ return crypto.createHash(algorithm).update(content).digest('hex');
575
+ }
576
+ export function hashString(data, algorithm = 'sha256') {
577
+ return crypto.createHash(algorithm).update(data).digest('hex');
578
+ }
579
+ export function hashBuffer(buffer, algorithm = 'sha256') {
580
+ return crypto.createHash(algorithm).update(buffer).digest('hex');
581
+ }
582
+ export function verifyFileHash(filePath, expectedHash, algorithm = 'sha256') {
583
+ const actualHash = hashFile(filePath, algorithm);
584
+ return actualHash === expectedHash;
585
+ }
586
+ export function generateNonce(bytes = 32) {
587
+ return crypto.randomBytes(bytes).toString('hex');
588
+ }
589
+ export function documentFraudIndicator(params) {
590
+ return params;
591
+ }
592
+ export const FRAUD_TYPES = {
593
+ DATA_MANIPULATION: 'Unauthorized modification of user data',
594
+ PRIVACY_VIOLATION: 'Collection/use of data beyond stated purposes',
595
+ TERMS_VIOLATION: 'Breach of terms of service by provider',
596
+ MISREPRESENTATION: 'False or misleading statements to users',
597
+ ANTICOMPETITIVE: 'Anti-competitive practices harming consumers',
598
+ SECURITY_NEGLIGENCE: 'Failure to protect user data',
599
+ BILLING_FRAUD: 'Unauthorized charges or billing manipulation',
600
+ CONSENT_VIOLATION: 'Action taken without proper consent',
601
+ DISCRIMINATION: 'Algorithmic or policy-based discrimination',
602
+ CENSORSHIP: 'Improper content moderation or suppression',
603
+ };
604
+ export const LEGAL_CITATIONS = {
605
+ FTC_ACT_SECTION_5: '15 U.S.C. § 45 - Unfair or Deceptive Acts or Practices',
606
+ CCPA: 'Cal. Civ. Code § 1798.100 et seq. - California Consumer Privacy Act',
607
+ GDPR: 'Regulation (EU) 2016/679 - General Data Protection Regulation',
608
+ COMPUTER_FRAUD: '18 U.S.C. § 1030 - Computer Fraud and Abuse Act',
609
+ WIRE_FRAUD: '18 U.S.C. § 1343 - Wire Fraud',
610
+ ECPA: '18 U.S.C. § 2510 et seq. - Electronic Communications Privacy Act',
611
+ STORED_COMM_ACT: '18 U.S.C. § 2701 et seq. - Stored Communications Act',
612
+ LANHAM_ACT: '15 U.S.C. § 1125 - False Advertising',
613
+ SHERMAN_ACT: '15 U.S.C. § 1-2 - Antitrust',
614
+ CLAYTON_ACT: '15 U.S.C. § 12-27 - Antitrust Enforcement',
615
+ };
616
+ //# sourceMappingURL=integrityVerification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrityVerification.js","sourceRoot":"","sources":["../../src/core/integrityVerification.ts"],"names":[],"mappings":"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"}