@shadowcoderr/context-graph 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/analyzers/a11y-extractor.d.ts +15 -0
  4. package/dist/analyzers/a11y-extractor.d.ts.map +1 -0
  5. package/dist/analyzers/a11y-extractor.js +148 -0
  6. package/dist/analyzers/a11y-extractor.js.map +1 -0
  7. package/dist/analyzers/dom-analyzer.d.ts +20 -0
  8. package/dist/analyzers/dom-analyzer.d.ts.map +1 -0
  9. package/dist/analyzers/dom-analyzer.js +126 -0
  10. package/dist/analyzers/dom-analyzer.js.map +1 -0
  11. package/dist/analyzers/locator-generator.d.ts +13 -0
  12. package/dist/analyzers/locator-generator.d.ts.map +1 -0
  13. package/dist/analyzers/locator-generator.js +381 -0
  14. package/dist/analyzers/locator-generator.js.map +1 -0
  15. package/dist/analyzers/network-logger.d.ts +15 -0
  16. package/dist/analyzers/network-logger.d.ts.map +1 -0
  17. package/dist/analyzers/network-logger.js +71 -0
  18. package/dist/analyzers/network-logger.js.map +1 -0
  19. package/dist/cli/index.d.ts +2 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +155 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/config/defaults.d.ts +3 -0
  24. package/dist/config/defaults.d.ts.map +1 -0
  25. package/dist/config/defaults.js +54 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/loader.d.ts +3 -0
  28. package/dist/config/loader.d.ts.map +1 -0
  29. package/dist/config/loader.js +75 -0
  30. package/dist/config/loader.js.map +1 -0
  31. package/dist/config/schema.d.ts +168 -0
  32. package/dist/config/schema.d.ts.map +1 -0
  33. package/dist/config/schema.js +104 -0
  34. package/dist/config/schema.js.map +1 -0
  35. package/dist/core/browser-adapter.d.ts +24 -0
  36. package/dist/core/browser-adapter.d.ts.map +1 -0
  37. package/dist/core/browser-adapter.js +208 -0
  38. package/dist/core/browser-adapter.js.map +1 -0
  39. package/dist/core/capture-engine.d.ts +52 -0
  40. package/dist/core/capture-engine.d.ts.map +1 -0
  41. package/dist/core/capture-engine.js +593 -0
  42. package/dist/core/capture-engine.js.map +1 -0
  43. package/dist/core/runtime.d.ts +38 -0
  44. package/dist/core/runtime.d.ts.map +1 -0
  45. package/dist/core/runtime.js +648 -0
  46. package/dist/core/runtime.js.map +1 -0
  47. package/dist/prompts/init-prompt.d.ts +12 -0
  48. package/dist/prompts/init-prompt.d.ts.map +1 -0
  49. package/dist/prompts/init-prompt.js +128 -0
  50. package/dist/prompts/init-prompt.js.map +1 -0
  51. package/dist/registry/components-registry.d.ts +97 -0
  52. package/dist/registry/components-registry.d.ts.map +1 -0
  53. package/dist/registry/components-registry.js +469 -0
  54. package/dist/registry/components-registry.js.map +1 -0
  55. package/dist/registry/index.d.ts +2 -0
  56. package/dist/registry/index.d.ts.map +1 -0
  57. package/dist/registry/index.js +7 -0
  58. package/dist/registry/index.js.map +1 -0
  59. package/dist/security/patterns.d.ts +4 -0
  60. package/dist/security/patterns.d.ts.map +1 -0
  61. package/dist/security/patterns.js +65 -0
  62. package/dist/security/patterns.js.map +1 -0
  63. package/dist/security/redactor.d.ts +26 -0
  64. package/dist/security/redactor.d.ts.map +1 -0
  65. package/dist/security/redactor.js +128 -0
  66. package/dist/security/redactor.js.map +1 -0
  67. package/dist/security/validator.d.ts +11 -0
  68. package/dist/security/validator.d.ts.map +1 -0
  69. package/dist/security/validator.js +62 -0
  70. package/dist/security/validator.js.map +1 -0
  71. package/dist/storage/engine.d.ts +45 -0
  72. package/dist/storage/engine.d.ts.map +1 -0
  73. package/dist/storage/engine.js +479 -0
  74. package/dist/storage/engine.js.map +1 -0
  75. package/dist/storage/manifest.d.ts +10 -0
  76. package/dist/storage/manifest.d.ts.map +1 -0
  77. package/dist/storage/manifest.js +98 -0
  78. package/dist/storage/manifest.js.map +1 -0
  79. package/dist/storage/serializer.d.ts +9 -0
  80. package/dist/storage/serializer.d.ts.map +1 -0
  81. package/dist/storage/serializer.js +22 -0
  82. package/dist/storage/serializer.js.map +1 -0
  83. package/dist/types/capture.d.ts +206 -0
  84. package/dist/types/capture.d.ts.map +1 -0
  85. package/dist/types/capture.js +3 -0
  86. package/dist/types/capture.js.map +1 -0
  87. package/dist/types/config.d.ts +63 -0
  88. package/dist/types/config.d.ts.map +1 -0
  89. package/dist/types/config.js +3 -0
  90. package/dist/types/config.js.map +1 -0
  91. package/dist/types/registry.d.ts +94 -0
  92. package/dist/types/registry.d.ts.map +1 -0
  93. package/dist/types/registry.js +3 -0
  94. package/dist/types/registry.js.map +1 -0
  95. package/dist/types/storage.d.ts +57 -0
  96. package/dist/types/storage.d.ts.map +1 -0
  97. package/dist/types/storage.js +3 -0
  98. package/dist/types/storage.js.map +1 -0
  99. package/dist/utils/hash.d.ts +3 -0
  100. package/dist/utils/hash.d.ts.map +1 -0
  101. package/dist/utils/hash.js +26 -0
  102. package/dist/utils/hash.js.map +1 -0
  103. package/dist/utils/logger.d.ts +20 -0
  104. package/dist/utils/logger.d.ts.map +1 -0
  105. package/dist/utils/logger.js +86 -0
  106. package/dist/utils/logger.js.map +1 -0
  107. package/dist/utils/pom-generator.d.ts +12 -0
  108. package/dist/utils/pom-generator.d.ts.map +1 -0
  109. package/dist/utils/pom-generator.js +83 -0
  110. package/dist/utils/pom-generator.js.map +1 -0
  111. package/dist/utils/validators.d.ts +7 -0
  112. package/dist/utils/validators.d.ts.map +1 -0
  113. package/dist/utils/validators.js +51 -0
  114. package/dist/utils/validators.js.map +1 -0
  115. package/package.json +70 -0
@@ -0,0 +1,469 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ComponentsRegistryManager = void 0;
37
+ // Developer: Shadow Coderr, Architect
38
+ const fs = __importStar(require("fs-extra"));
39
+ const path = __importStar(require("path"));
40
+ const crypto = __importStar(require("crypto"));
41
+ const logger_1 = require("../utils/logger");
42
+ const DEFAULT_EXTRACTION_OPTIONS = {
43
+ minOccurrences: 1,
44
+ stabilityThreshold: 50,
45
+ includeContext: true,
46
+ maxComponents: 1000,
47
+ };
48
+ /**
49
+ * Components Registry Manager
50
+ * Tracks reusable UI component patterns across captured pages
51
+ */
52
+ class ComponentsRegistryManager {
53
+ registry;
54
+ registryPath;
55
+ options;
56
+ constructor(outputDir, domain, options) {
57
+ this.registryPath = path.join(outputDir, 'components_registry.json');
58
+ this.options = { ...DEFAULT_EXTRACTION_OPTIONS, ...options };
59
+ this.registry = this.createEmptyRegistry(domain);
60
+ }
61
+ /**
62
+ * Initialize or load existing registry
63
+ */
64
+ async initialize() {
65
+ if (await fs.pathExists(this.registryPath)) {
66
+ try {
67
+ const loaded = await fs.readJson(this.registryPath);
68
+ this.registry = loaded;
69
+ logger_1.logger.info(`Loaded existing components registry with ${this.registry.components.length} components`);
70
+ }
71
+ catch (error) {
72
+ logger_1.logger.warn(`Failed to load existing registry, creating new one: ${error.message}`);
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * Extract components from a page snapshot and update registry
78
+ */
79
+ async processPage(snapshot) {
80
+ const extractedComponents = this.extractComponents(snapshot);
81
+ for (const extracted of extractedComponents) {
82
+ await this.registerComponent(extracted, snapshot);
83
+ }
84
+ // Update statistics
85
+ this.updateStatistics();
86
+ return extractedComponents;
87
+ }
88
+ /**
89
+ * Extract potential components from a page snapshot
90
+ */
91
+ extractComponents(snapshot) {
92
+ const extracted = [];
93
+ const locatorsData = snapshot.locators;
94
+ for (const element of locatorsData.elements) {
95
+ // Only consider elements with unique locators
96
+ const uniqueLocators = element.locators.filter((l) => l.isUnique);
97
+ if (uniqueLocators.length === 0)
98
+ continue;
99
+ const signature = this.computeSignature(element);
100
+ extracted.push({
101
+ elementId: element.elementId,
102
+ tagName: element.tagName,
103
+ role: element.attributes.role,
104
+ text: element.text || '',
105
+ locators: uniqueLocators,
106
+ attributes: element.attributes,
107
+ signature,
108
+ });
109
+ }
110
+ return extracted;
111
+ }
112
+ /**
113
+ * Compute a signature for identifying similar components
114
+ */
115
+ computeSignature(element) {
116
+ const signature = {
117
+ tagName: element.tagName,
118
+ role: element.attributes?.role,
119
+ classes: [],
120
+ attributes: {},
121
+ structureHash: this.computeStructureHash(element),
122
+ };
123
+ // Extract stable classes (filter out dynamic ones)
124
+ if (element.attributes?.class) {
125
+ const classes = element.attributes.class.split(' ').filter((c) => !c.match(/^(active|disabled|selected|hover|focus|open|closed|loading|error|success)$/i) &&
126
+ !c.match(/[0-9]{3,}/) && // Exclude classes with long numbers (likely dynamic)
127
+ c.length > 2);
128
+ signature.classes = classes.slice(0, 5); // Limit to 5 classes
129
+ }
130
+ // Extract stable attributes
131
+ const stableAttrs = ['type', 'name', 'data-testid', 'data-test', 'aria-label', 'placeholder'];
132
+ for (const attr of stableAttrs) {
133
+ if (element.attributes?.[attr]) {
134
+ if (!signature.attributes)
135
+ signature.attributes = {};
136
+ signature.attributes[attr] = element.attributes[attr];
137
+ }
138
+ }
139
+ return signature;
140
+ }
141
+ /**
142
+ * Compute a hash of the element structure for comparison
143
+ */
144
+ computeStructureHash(element) {
145
+ const structure = {
146
+ tag: element.tagName,
147
+ role: element.attributes?.role,
148
+ type: element.attributes?.type,
149
+ };
150
+ return crypto.createHash('md5').update(JSON.stringify(structure)).digest('hex').substring(0, 8);
151
+ }
152
+ /**
153
+ * Infer component type from element properties
154
+ */
155
+ inferComponentType(element) {
156
+ const tagName = element.tagName?.toLowerCase();
157
+ const role = element.attributes?.role?.toLowerCase();
158
+ const type = element.attributes?.type?.toLowerCase();
159
+ // Role-based detection
160
+ if (role === 'navigation' || role === 'menu')
161
+ return 'navigation';
162
+ if (role === 'dialog' || role === 'alertdialog')
163
+ return 'modal';
164
+ if (role === 'search')
165
+ return 'search';
166
+ if (role === 'banner')
167
+ return 'header';
168
+ if (role === 'contentinfo')
169
+ return 'footer';
170
+ // Tag-based detection
171
+ if (tagName === 'nav')
172
+ return 'navigation';
173
+ if (tagName === 'header')
174
+ return 'header';
175
+ if (tagName === 'footer')
176
+ return 'footer';
177
+ if (tagName === 'aside')
178
+ return 'sidebar';
179
+ if (tagName === 'form')
180
+ return 'form';
181
+ if (tagName === 'table')
182
+ return 'table';
183
+ if (tagName === 'ul' || tagName === 'ol')
184
+ return 'list';
185
+ if (tagName === 'article' || tagName === 'section')
186
+ return 'card';
187
+ // Input type detection
188
+ if (tagName === 'input') {
189
+ if (type === 'search')
190
+ return 'search';
191
+ if (type === 'submit' || type === 'button')
192
+ return 'button';
193
+ return 'input';
194
+ }
195
+ if (tagName === 'select')
196
+ return 'select';
197
+ if (tagName === 'textarea')
198
+ return 'input';
199
+ if (tagName === 'button')
200
+ return 'button';
201
+ if (tagName === 'a')
202
+ return 'link';
203
+ // Text-based detection
204
+ const text = element.text?.toLowerCase() || '';
205
+ if (text.includes('login') || text.includes('sign in'))
206
+ return 'login';
207
+ if (text.includes('search'))
208
+ return 'search';
209
+ if (text.includes('previous') || text.includes('next') || text.includes('page'))
210
+ return 'pagination';
211
+ if (text.includes('breadcrumb'))
212
+ return 'breadcrumb';
213
+ return 'custom';
214
+ }
215
+ /**
216
+ * Register a component in the registry
217
+ */
218
+ async registerComponent(extracted, snapshot) {
219
+ // Find existing component with matching signature
220
+ const existingComponent = this.findMatchingComponent(extracted.signature);
221
+ if (existingComponent) {
222
+ // Add occurrence to existing component
223
+ this.addOccurrence(existingComponent, extracted, snapshot);
224
+ }
225
+ else {
226
+ // Create new component pattern
227
+ if (this.registry.components.length < this.options.maxComponents) {
228
+ this.createNewComponent(extracted, snapshot);
229
+ }
230
+ }
231
+ }
232
+ /**
233
+ * Find a component matching the given signature
234
+ */
235
+ findMatchingComponent(signature) {
236
+ return this.registry.components.find(c => {
237
+ // Match by structure hash
238
+ if (c.signature.structureHash && signature.structureHash &&
239
+ c.signature.structureHash === signature.structureHash) {
240
+ return true;
241
+ }
242
+ // Match by role and tag
243
+ if (c.signature.role && signature.role && c.signature.role === signature.role &&
244
+ c.signature.tagName === signature.tagName) {
245
+ return true;
246
+ }
247
+ // Match by test ID pattern
248
+ if (c.signature.attributes?.['data-testid'] && signature.attributes?.['data-testid']) {
249
+ return c.signature.attributes['data-testid'] === signature.attributes['data-testid'];
250
+ }
251
+ return false;
252
+ });
253
+ }
254
+ /**
255
+ * Add an occurrence to an existing component
256
+ */
257
+ addOccurrence(component, extracted, snapshot) {
258
+ const bestLocator = this.selectBestLocator(extracted.locators);
259
+ const occurrence = {
260
+ pageId: snapshot.metadata.captureId,
261
+ pageUrl: snapshot.metadata.url,
262
+ timestamp: snapshot.metadata.timestamp,
263
+ elementId: extracted.elementId,
264
+ locator: bestLocator,
265
+ };
266
+ component.occurrences.push(occurrence);
267
+ component.metadata.lastSeen = snapshot.metadata.timestamp;
268
+ component.metadata.totalOccurrences++;
269
+ // Update unique pages count
270
+ const uniquePages = new Set(component.occurrences.map(o => o.pageId));
271
+ component.metadata.uniquePages = uniquePages.size;
272
+ // Update best locators if we found a better one
273
+ this.updateBestLocators(component, extracted.locators);
274
+ }
275
+ /**
276
+ * Create a new component pattern
277
+ */
278
+ createNewComponent(extracted, snapshot) {
279
+ const componentType = this.inferComponentType(extracted);
280
+ const bestLocator = this.selectBestLocator(extracted.locators);
281
+ const component = {
282
+ componentId: `comp_${this.registry.components.length.toString().padStart(4, '0')}`,
283
+ name: this.generateComponentName(extracted, componentType),
284
+ type: componentType,
285
+ signature: extracted.signature,
286
+ occurrences: [{
287
+ pageId: snapshot.metadata.captureId,
288
+ pageUrl: snapshot.metadata.url,
289
+ timestamp: snapshot.metadata.timestamp,
290
+ elementId: extracted.elementId,
291
+ locator: bestLocator,
292
+ }],
293
+ bestLocators: extracted.locators.slice(0, 3),
294
+ metadata: {
295
+ firstSeen: snapshot.metadata.timestamp,
296
+ lastSeen: snapshot.metadata.timestamp,
297
+ totalOccurrences: 1,
298
+ uniquePages: 1,
299
+ avgStability: this.calculateStability(extracted.locators),
300
+ tags: [componentType],
301
+ description: this.generateDescription(extracted, componentType),
302
+ },
303
+ };
304
+ this.registry.components.push(component);
305
+ logger_1.logger.debug(`Created new component: ${component.name} (${component.componentId})`);
306
+ }
307
+ /**
308
+ * Select the best locator from candidates
309
+ */
310
+ selectBestLocator(locators) {
311
+ // Prefer unique locators with high resilience
312
+ const sorted = [...locators].sort((a, b) => {
313
+ // Prioritize unique locators
314
+ if (a.isUnique && !b.isUnique)
315
+ return -1;
316
+ if (!a.isUnique && b.isUnique)
317
+ return 1;
318
+ // Then by resilience
319
+ return (b.resilience || 0) - (a.resilience || 0);
320
+ });
321
+ return sorted[0];
322
+ }
323
+ /**
324
+ * Update best locators if we find better ones
325
+ */
326
+ updateBestLocators(component, newLocators) {
327
+ const allLocators = [...component.bestLocators, ...newLocators];
328
+ // Deduplicate by strategy and value
329
+ const uniqueLocators = new Map();
330
+ for (const locator of allLocators) {
331
+ const key = `${locator.strategy}:${locator.value}`;
332
+ if (!uniqueLocators.has(key) || (locator.isUnique && !uniqueLocators.get(key)?.isUnique)) {
333
+ uniqueLocators.set(key, locator);
334
+ }
335
+ }
336
+ // Sort and take top 3
337
+ component.bestLocators = Array.from(uniqueLocators.values())
338
+ .sort((a, b) => {
339
+ if (a.isUnique && !b.isUnique)
340
+ return -1;
341
+ if (!a.isUnique && b.isUnique)
342
+ return 1;
343
+ return (b.resilience || 0) - (a.resilience || 0);
344
+ })
345
+ .slice(0, 3);
346
+ // Update average stability
347
+ component.metadata.avgStability = this.calculateStability(component.bestLocators);
348
+ }
349
+ /**
350
+ * Calculate average stability score for locators
351
+ */
352
+ calculateStability(locators) {
353
+ if (locators.length === 0)
354
+ return 0;
355
+ const stabilityScores = locators.map(l => {
356
+ let score = l.resilience || 50;
357
+ if (l.isUnique)
358
+ score += 20;
359
+ if (l.matchCount === 1)
360
+ score += 10;
361
+ return Math.min(100, score);
362
+ });
363
+ return Math.round(stabilityScores.reduce((a, b) => a + b, 0) / stabilityScores.length);
364
+ }
365
+ /**
366
+ * Generate a human-readable component name
367
+ */
368
+ generateComponentName(extracted, type) {
369
+ // Try to use text content
370
+ if (extracted.text && extracted.text.length < 30) {
371
+ return `${type}_${extracted.text.toLowerCase().replace(/[^a-z0-9]/g, '_')}`;
372
+ }
373
+ // Try to use test ID
374
+ if (extracted.attributes['data-testid']) {
375
+ return `${type}_${extracted.attributes['data-testid'].toLowerCase()}`;
376
+ }
377
+ // Try to use aria-label
378
+ if (extracted.attributes['aria-label']) {
379
+ return `${type}_${extracted.attributes['aria-label'].toLowerCase().replace(/[^a-z0-9]/g, '_')}`;
380
+ }
381
+ // Fallback to tag and role
382
+ const role = extracted.role || extracted.attributes.role || 'unknown';
383
+ return `${type}_${extracted.tagName}_${role}`.toLowerCase();
384
+ }
385
+ /**
386
+ * Generate a description for the component
387
+ */
388
+ generateDescription(extracted, type) {
389
+ const parts = [`${type} component`];
390
+ if (extracted.text) {
391
+ parts.push(`with text "${extracted.text.substring(0, 50)}"`);
392
+ }
393
+ if (extracted.attributes['data-testid']) {
394
+ parts.push(`(testid: ${extracted.attributes['data-testid']})`);
395
+ }
396
+ return parts.join(' ');
397
+ }
398
+ /**
399
+ * Update registry statistics
400
+ */
401
+ updateStatistics() {
402
+ const stats = this.registry.statistics;
403
+ stats.totalComponents = this.registry.components.length;
404
+ stats.totalOccurrences = this.registry.components.reduce((sum, c) => sum + c.metadata.totalOccurrences, 0);
405
+ // Count by type
406
+ stats.byType = {};
407
+ for (const component of this.registry.components) {
408
+ stats.byType[component.type] = (stats.byType[component.type] || 0) + 1;
409
+ }
410
+ // Calculate average stability
411
+ if (this.registry.components.length > 0) {
412
+ stats.avgStability = Math.round(this.registry.components.reduce((sum, c) => sum + c.metadata.avgStability, 0) /
413
+ this.registry.components.length);
414
+ }
415
+ // Find most common components
416
+ stats.mostCommon = this.registry.components
417
+ .sort((a, b) => b.metadata.totalOccurrences - a.metadata.totalOccurrences)
418
+ .slice(0, 10)
419
+ .map(c => c.componentId);
420
+ this.registry.lastUpdated = new Date().toISOString();
421
+ }
422
+ /**
423
+ * Save the registry to disk
424
+ */
425
+ async save() {
426
+ await fs.ensureDir(path.dirname(this.registryPath));
427
+ await fs.writeJson(this.registryPath, this.registry, { spaces: 2 });
428
+ logger_1.logger.info(`Saved components registry to ${this.registryPath}`);
429
+ }
430
+ /**
431
+ * Get the current registry
432
+ */
433
+ getRegistry() {
434
+ return this.registry;
435
+ }
436
+ /**
437
+ * Find components by type
438
+ */
439
+ getComponentsByType(type) {
440
+ return this.registry.components.filter(c => c.type === type);
441
+ }
442
+ /**
443
+ * Find components that appear on a specific page
444
+ */
445
+ getComponentsByPage(pageId) {
446
+ return this.registry.components.filter(c => c.occurrences.some(o => o.pageId === pageId));
447
+ }
448
+ /**
449
+ * Create an empty registry
450
+ */
451
+ createEmptyRegistry(domain) {
452
+ return {
453
+ version: '1.0.0',
454
+ createdAt: new Date().toISOString(),
455
+ lastUpdated: new Date().toISOString(),
456
+ domain,
457
+ components: [],
458
+ statistics: {
459
+ totalComponents: 0,
460
+ totalOccurrences: 0,
461
+ byType: {},
462
+ avgStability: 0,
463
+ mostCommon: [],
464
+ },
465
+ };
466
+ }
467
+ }
468
+ exports.ComponentsRegistryManager = ComponentsRegistryManager;
469
+ //# sourceMappingURL=components-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components-registry.js","sourceRoot":"","sources":["../../src/registry/components-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ComponentsRegistryManager } from './components-registry';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentsRegistryManager = void 0;
4
+ // Developer: Shadow Coderr, Architect
5
+ var components_registry_1 = require("./components-registry");
6
+ Object.defineProperty(exports, "ComponentsRegistryManager", { enumerable: true, get: function () { return components_registry_1.ComponentsRegistryManager; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,6DAAkE;AAAzD,gIAAA,yBAAyB,OAAA"}
@@ -0,0 +1,4 @@
1
+ import { RedactionRule } from '../types/config';
2
+ export declare const BUILTIN_REDACTION_RULES: RedactionRule[];
3
+ export declare const REDACTED_HEADERS: string[];
4
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/security/patterns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,eAAO,MAAM,uBAAuB,EAAE,aAAa,EAiDlD,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAU5B,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REDACTED_HEADERS = exports.BUILTIN_REDACTION_RULES = void 0;
4
+ exports.BUILTIN_REDACTION_RULES = [
5
+ {
6
+ name: 'jwt_token',
7
+ pattern: /eyJ[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*/g,
8
+ replacement: '[REDACTED:JWT]',
9
+ severity: 'critical',
10
+ },
11
+ {
12
+ name: 'bearer_token',
13
+ pattern: /Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,
14
+ replacement: '[REDACTED:BEARER]',
15
+ severity: 'critical',
16
+ },
17
+ {
18
+ name: 'credit_card',
19
+ pattern: /\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b/g,
20
+ replacement: '[REDACTED:CC]',
21
+ severity: 'critical',
22
+ },
23
+ {
24
+ name: 'ssn',
25
+ pattern: /\b\d{3}-\d{2}-\d{4}\b/g,
26
+ replacement: '[REDACTED:SSN]',
27
+ severity: 'critical',
28
+ },
29
+ {
30
+ name: 'api_key',
31
+ pattern: /[Aa][Pp][Ii][-_]?[Kk][Ee][Yy][\s:=]+['""]?([A-Za-z0-9_\-]{20,})['""]?/g,
32
+ replacement: '[REDACTED:API_KEY]',
33
+ severity: 'critical',
34
+ },
35
+ {
36
+ name: 'email',
37
+ pattern: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
38
+ replacement: '[REDACTED:EMAIL]',
39
+ severity: 'high',
40
+ },
41
+ {
42
+ name: 'phone_number',
43
+ pattern: /\b(\+?1[-.]?)?\(?\d{3}\)?[-.]?\d{3}[-.]?\d{4}\b/g,
44
+ replacement: '[REDACTED:PHONE]',
45
+ severity: 'medium',
46
+ },
47
+ {
48
+ name: 'aws_key',
49
+ pattern: /AKIA[0-9A-Z]{16}/g,
50
+ replacement: '[REDACTED:AWS_KEY]',
51
+ severity: 'critical',
52
+ },
53
+ ];
54
+ exports.REDACTED_HEADERS = [
55
+ 'authorization',
56
+ 'cookie',
57
+ 'set-cookie',
58
+ 'x-api-key',
59
+ 'x-auth-token',
60
+ 'x-csrf-token',
61
+ 'x-access-token',
62
+ 'x-refresh-token',
63
+ 'proxy-authorization',
64
+ ];
65
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/security/patterns.ts"],"names":[],"mappings":";;;AAGa,QAAA,uBAAuB,GAAoB;IACtD;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,2DAA2D;QACpE,WAAW,EAAE,gBAAgB;QAC7B,QAAQ,EAAE,UAAU;KACrB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,kCAAkC;QAC3C,WAAW,EAAE,mBAAmB;QAChC,QAAQ,EAAE,UAAU;KACrB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,6CAA6C;QACtD,WAAW,EAAE,eAAe;QAC5B,QAAQ,EAAE,UAAU;KACrB;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,wBAAwB;QACjC,WAAW,EAAE,gBAAgB;QAC7B,QAAQ,EAAE,UAAU;KACrB;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,wEAAwE;QACjF,WAAW,EAAE,oBAAoB;QACjC,QAAQ,EAAE,UAAU;KACrB;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,sDAAsD;QAC/D,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,kDAAkD;QAC3D,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,mBAAmB;QAC5B,WAAW,EAAE,oBAAoB;QACjC,QAAQ,EAAE,UAAU;KACrB;CACF,CAAC;AAEW,QAAA,gBAAgB,GAAG;IAC9B,eAAe;IACf,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,iBAAiB;IACjB,qBAAqB;CACtB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { RedactionRule } from '../types/config';
2
+ import { RedactionAuditEntry } from '../types/storage';
3
+ export interface RedactionResult {
4
+ originalSize: number;
5
+ redactedSize: number;
6
+ redactions: Array<{
7
+ rule: string;
8
+ count: number;
9
+ locations: string[];
10
+ }>;
11
+ success: boolean;
12
+ }
13
+ export declare class SecurityRedactor {
14
+ private rules;
15
+ private redactedHeaders;
16
+ private sensitiveKeys;
17
+ private auditLog;
18
+ constructor(customRules?: RedactionRule[]);
19
+ redact(data: any, context: string, url?: string): Promise<RedactionResult>;
20
+ private redactSensitiveKeys;
21
+ private redactHeaders;
22
+ private applyRule;
23
+ getAuditLog(): RedactionAuditEntry[];
24
+ clearAuditLog(): void;
25
+ }
26
+ //# sourceMappingURL=redactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.d.ts","sourceRoot":"","sources":["../../src/security/redactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,aAAa,CAA2G;IAChI,OAAO,CAAC,QAAQ,CAA6B;gBAEjC,WAAW,GAAE,aAAa,EAAO;IAKvC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAiDhF,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,SAAS;IA2BjB,WAAW,IAAI,mBAAmB,EAAE;IAIpC,aAAa,IAAI,IAAI;CAGtB"}