@bugspotter/sdk 0.1.0-alpha.1

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 (67) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/LICENSE +21 -0
  3. package/README.md +639 -0
  4. package/dist/bugspotter.min.js +2 -0
  5. package/dist/bugspotter.min.js.LICENSE.txt +14 -0
  6. package/dist/capture/base-capture.d.ts +34 -0
  7. package/dist/capture/base-capture.js +23 -0
  8. package/dist/capture/capture-lifecycle.d.ts +24 -0
  9. package/dist/capture/capture-lifecycle.js +2 -0
  10. package/dist/capture/console.d.ts +29 -0
  11. package/dist/capture/console.js +107 -0
  12. package/dist/capture/metadata.d.ts +21 -0
  13. package/dist/capture/metadata.js +76 -0
  14. package/dist/capture/network.d.ts +32 -0
  15. package/dist/capture/network.js +135 -0
  16. package/dist/capture/screenshot.d.ts +19 -0
  17. package/dist/capture/screenshot.js +52 -0
  18. package/dist/collectors/dom.d.ts +67 -0
  19. package/dist/collectors/dom.js +164 -0
  20. package/dist/collectors/index.d.ts +2 -0
  21. package/dist/collectors/index.js +5 -0
  22. package/dist/core/buffer.d.ts +50 -0
  23. package/dist/core/buffer.js +88 -0
  24. package/dist/core/circular-buffer.d.ts +42 -0
  25. package/dist/core/circular-buffer.js +77 -0
  26. package/dist/core/compress.d.ts +49 -0
  27. package/dist/core/compress.js +245 -0
  28. package/dist/core/offline-queue.d.ts +76 -0
  29. package/dist/core/offline-queue.js +301 -0
  30. package/dist/core/transport.d.ts +73 -0
  31. package/dist/core/transport.js +352 -0
  32. package/dist/core/upload-helpers.d.ts +32 -0
  33. package/dist/core/upload-helpers.js +79 -0
  34. package/dist/core/uploader.d.ts +70 -0
  35. package/dist/core/uploader.js +185 -0
  36. package/dist/index.d.ts +140 -0
  37. package/dist/index.esm.js +205 -0
  38. package/dist/index.js +244 -0
  39. package/dist/utils/logger.d.ts +28 -0
  40. package/dist/utils/logger.js +84 -0
  41. package/dist/utils/sanitize-patterns.d.ts +103 -0
  42. package/dist/utils/sanitize-patterns.js +282 -0
  43. package/dist/utils/sanitize.d.ts +73 -0
  44. package/dist/utils/sanitize.js +254 -0
  45. package/dist/widget/button.d.ts +33 -0
  46. package/dist/widget/button.js +143 -0
  47. package/dist/widget/components/dom-element-cache.d.ts +62 -0
  48. package/dist/widget/components/dom-element-cache.js +105 -0
  49. package/dist/widget/components/form-validator.d.ts +66 -0
  50. package/dist/widget/components/form-validator.js +115 -0
  51. package/dist/widget/components/pii-detection-display.d.ts +64 -0
  52. package/dist/widget/components/pii-detection-display.js +142 -0
  53. package/dist/widget/components/redaction-canvas.d.ts +95 -0
  54. package/dist/widget/components/redaction-canvas.js +230 -0
  55. package/dist/widget/components/screenshot-processor.d.ts +44 -0
  56. package/dist/widget/components/screenshot-processor.js +191 -0
  57. package/dist/widget/components/style-manager.d.ts +37 -0
  58. package/dist/widget/components/style-manager.js +296 -0
  59. package/dist/widget/components/template-manager.d.ts +66 -0
  60. package/dist/widget/components/template-manager.js +198 -0
  61. package/dist/widget/modal.d.ts +62 -0
  62. package/dist/widget/modal.js +299 -0
  63. package/docs/CDN.md +213 -0
  64. package/docs/FRAMEWORK_INTEGRATION.md +1104 -0
  65. package/docs/PUBLISHING.md +550 -0
  66. package/docs/SESSION_REPLAY.md +381 -0
  67. package/package.json +90 -0
package/dist/index.js ADDED
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BugReportModal = exports.FloatingButton = exports.validatePattern = exports.getPatternsByCategory = exports.getPattern = exports.createPatternConfig = exports.PatternBuilder = exports.PATTERN_CATEGORIES = exports.PATTERN_PRESETS = exports.DEFAULT_PATTERNS = exports.Sanitizer = exports.createSanitizer = exports.isWithinSizeLimit = exports.estimateCompressedReplaySize = exports.canvasToBlob = exports.compressReplayEvents = exports.DirectUploader = exports.createLogger = exports.configureLogger = exports.getLogger = exports.clearOfflineQueue = exports.getAuthHeaders = exports.submitWithAuth = exports.getCompressionRatio = exports.estimateSize = exports.compressImage = exports.decompressData = exports.compressData = exports.CircularBuffer = exports.DOMCollector = exports.MetadataCapture = exports.NetworkCapture = exports.ConsoleCapture = exports.ScreenshotCapture = exports.BugSpotter = void 0;
4
+ exports.sanitize = sanitize;
5
+ const screenshot_1 = require("./capture/screenshot");
6
+ const console_1 = require("./capture/console");
7
+ const network_1 = require("./capture/network");
8
+ const metadata_1 = require("./capture/metadata");
9
+ const compress_1 = require("./core/compress");
10
+ const button_1 = require("./widget/button");
11
+ const modal_1 = require("./widget/modal");
12
+ const collectors_1 = require("./collectors");
13
+ const sanitize_1 = require("./utils/sanitize");
14
+ const logger_1 = require("./utils/logger");
15
+ const transport_1 = require("./core/transport");
16
+ const logger = (0, logger_1.getLogger)();
17
+ class BugSpotter {
18
+ constructor(config) {
19
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
20
+ this.config = config;
21
+ // Initialize sanitizer if enabled
22
+ if (((_a = config.sanitize) === null || _a === void 0 ? void 0 : _a.enabled) !== false) {
23
+ this.sanitizer = (0, sanitize_1.createSanitizer)({
24
+ enabled: (_c = (_b = config.sanitize) === null || _b === void 0 ? void 0 : _b.enabled) !== null && _c !== void 0 ? _c : true,
25
+ patterns: (_d = config.sanitize) === null || _d === void 0 ? void 0 : _d.patterns,
26
+ customPatterns: (_e = config.sanitize) === null || _e === void 0 ? void 0 : _e.customPatterns,
27
+ excludeSelectors: (_f = config.sanitize) === null || _f === void 0 ? void 0 : _f.excludeSelectors,
28
+ });
29
+ }
30
+ this.screenshot = new screenshot_1.ScreenshotCapture();
31
+ this.console = new console_1.ConsoleCapture({ sanitizer: this.sanitizer });
32
+ this.network = new network_1.NetworkCapture({ sanitizer: this.sanitizer });
33
+ this.metadata = new metadata_1.MetadataCapture({ sanitizer: this.sanitizer });
34
+ // Note: DirectUploader is created per-report since it needs bugId
35
+ // See submitBugReport() for initialization
36
+ // Initialize DOM collector if replay is enabled
37
+ if (((_g = config.replay) === null || _g === void 0 ? void 0 : _g.enabled) !== false) {
38
+ this.domCollector = new collectors_1.DOMCollector({
39
+ duration: (_j = (_h = config.replay) === null || _h === void 0 ? void 0 : _h.duration) !== null && _j !== void 0 ? _j : 15,
40
+ sampling: (_k = config.replay) === null || _k === void 0 ? void 0 : _k.sampling,
41
+ sanitizer: this.sanitizer,
42
+ });
43
+ this.domCollector.startRecording();
44
+ }
45
+ // Initialize widget if enabled
46
+ if (config.showWidget !== false) {
47
+ this.widget = new button_1.FloatingButton(config.widgetOptions);
48
+ this.widget.onClick(async () => {
49
+ await this.handleBugReport();
50
+ });
51
+ }
52
+ }
53
+ static init(config) {
54
+ if (!BugSpotter.instance) {
55
+ BugSpotter.instance = new BugSpotter(config);
56
+ }
57
+ return BugSpotter.instance;
58
+ }
59
+ static getInstance() {
60
+ return BugSpotter.instance || null;
61
+ }
62
+ /**
63
+ * Capture bug report data
64
+ * Note: Screenshot is captured for modal preview only (_screenshotPreview)
65
+ * Actual file uploads use presigned URLs (screenshotKey/replayKey set after upload)
66
+ */
67
+ async capture() {
68
+ var _a, _b;
69
+ const screenshotPreview = await this.screenshot.capture();
70
+ const replayEvents = (_b = (_a = this.domCollector) === null || _a === void 0 ? void 0 : _a.getEvents()) !== null && _b !== void 0 ? _b : [];
71
+ return {
72
+ console: this.console.getLogs(),
73
+ network: this.network.getRequests(),
74
+ metadata: this.metadata.capture(),
75
+ replay: replayEvents,
76
+ // Internal: screenshot preview for modal (not sent to API)
77
+ _screenshotPreview: screenshotPreview,
78
+ };
79
+ }
80
+ async handleBugReport() {
81
+ const report = await this.capture();
82
+ const modal = new modal_1.BugReportModal({
83
+ onSubmit: async (data) => {
84
+ logger.log('Submitting bug:', Object.assign(Object.assign({}, data), { report }));
85
+ // Send to endpoint if configured
86
+ if (this.config.endpoint) {
87
+ try {
88
+ await this.submitBugReport(Object.assign(Object.assign({}, data), { report }));
89
+ logger.log('Bug report submitted successfully');
90
+ }
91
+ catch (error) {
92
+ logger.error('Failed to submit bug report:', error);
93
+ // Re-throw to allow UI to handle errors if needed
94
+ throw error;
95
+ }
96
+ }
97
+ },
98
+ });
99
+ modal.show(report._screenshotPreview || '');
100
+ }
101
+ async submitBugReport(payload) {
102
+ if (!this.config.endpoint) {
103
+ throw new Error('No endpoint configured for bug report submission');
104
+ }
105
+ const contentHeaders = {
106
+ 'Content-Type': 'application/json',
107
+ };
108
+ logger.warn(`Submitting bug report to ${this.config.endpoint}`);
109
+ let body;
110
+ try {
111
+ // Try to compress the payload
112
+ const originalSize = (0, compress_1.estimateSize)(payload);
113
+ const compressed = await (0, compress_1.compressData)(payload);
114
+ const compressedSize = compressed.byteLength;
115
+ const ratio = (0, compress_1.getCompressionRatio)(originalSize, compressedSize);
116
+ logger.log(`Payload compression: ${(originalSize / 1024).toFixed(1)}KB → ${(compressedSize / 1024).toFixed(1)}KB (${ratio}% reduction)`);
117
+ // Use compression if it actually reduces size
118
+ if (compressedSize < originalSize) {
119
+ // Create a Blob from the compressed Uint8Array for proper binary upload
120
+ // Use Uint8Array constructor to ensure clean ArrayBuffer (no extra padding bytes)
121
+ body = new Blob([new Uint8Array(compressed)], { type: 'application/gzip' });
122
+ contentHeaders['Content-Encoding'] = 'gzip';
123
+ contentHeaders['Content-Type'] = 'application/gzip';
124
+ }
125
+ else {
126
+ body = JSON.stringify(payload);
127
+ }
128
+ }
129
+ catch (error) {
130
+ // Fallback to uncompressed if compression fails
131
+ logger.warn('Compression failed, sending uncompressed payload:', error);
132
+ body = JSON.stringify(payload);
133
+ }
134
+ // Determine auth configuration
135
+ const auth = this.config.auth;
136
+ // Submit with authentication, retry logic, and offline queue
137
+ const response = await (0, transport_1.submitWithAuth)(this.config.endpoint, body, contentHeaders, {
138
+ auth,
139
+ retry: this.config.retry,
140
+ offline: this.config.offline,
141
+ });
142
+ logger.warn(`${JSON.stringify(response)}`);
143
+ if (!response.ok) {
144
+ const errorText = await response.text().catch(() => {
145
+ return 'Unknown error';
146
+ });
147
+ throw new Error(`Failed to submit bug report: ${response.status} ${response.statusText}. ${errorText}`);
148
+ }
149
+ return response.json().catch(() => {
150
+ return undefined;
151
+ });
152
+ }
153
+ getConfig() {
154
+ return Object.assign({}, this.config);
155
+ }
156
+ destroy() {
157
+ var _a, _b;
158
+ this.console.destroy();
159
+ this.network.destroy();
160
+ (_a = this.domCollector) === null || _a === void 0 ? void 0 : _a.destroy();
161
+ (_b = this.widget) === null || _b === void 0 ? void 0 : _b.destroy();
162
+ BugSpotter.instance = undefined;
163
+ }
164
+ }
165
+ exports.BugSpotter = BugSpotter;
166
+ var screenshot_2 = require("./capture/screenshot");
167
+ Object.defineProperty(exports, "ScreenshotCapture", { enumerable: true, get: function () { return screenshot_2.ScreenshotCapture; } });
168
+ var console_2 = require("./capture/console");
169
+ Object.defineProperty(exports, "ConsoleCapture", { enumerable: true, get: function () { return console_2.ConsoleCapture; } });
170
+ var network_2 = require("./capture/network");
171
+ Object.defineProperty(exports, "NetworkCapture", { enumerable: true, get: function () { return network_2.NetworkCapture; } });
172
+ var metadata_2 = require("./capture/metadata");
173
+ Object.defineProperty(exports, "MetadataCapture", { enumerable: true, get: function () { return metadata_2.MetadataCapture; } });
174
+ // Export collector modules
175
+ var collectors_2 = require("./collectors");
176
+ Object.defineProperty(exports, "DOMCollector", { enumerable: true, get: function () { return collectors_2.DOMCollector; } });
177
+ // Export core utilities
178
+ var buffer_1 = require("./core/buffer");
179
+ Object.defineProperty(exports, "CircularBuffer", { enumerable: true, get: function () { return buffer_1.CircularBuffer; } });
180
+ // Export compression utilities
181
+ var compress_2 = require("./core/compress");
182
+ Object.defineProperty(exports, "compressData", { enumerable: true, get: function () { return compress_2.compressData; } });
183
+ Object.defineProperty(exports, "decompressData", { enumerable: true, get: function () { return compress_2.decompressData; } });
184
+ Object.defineProperty(exports, "compressImage", { enumerable: true, get: function () { return compress_2.compressImage; } });
185
+ Object.defineProperty(exports, "estimateSize", { enumerable: true, get: function () { return compress_2.estimateSize; } });
186
+ Object.defineProperty(exports, "getCompressionRatio", { enumerable: true, get: function () { return compress_2.getCompressionRatio; } });
187
+ // Export transport and authentication
188
+ var transport_2 = require("./core/transport");
189
+ Object.defineProperty(exports, "submitWithAuth", { enumerable: true, get: function () { return transport_2.submitWithAuth; } });
190
+ Object.defineProperty(exports, "getAuthHeaders", { enumerable: true, get: function () { return transport_2.getAuthHeaders; } });
191
+ Object.defineProperty(exports, "clearOfflineQueue", { enumerable: true, get: function () { return transport_2.clearOfflineQueue; } });
192
+ var logger_2 = require("./utils/logger");
193
+ Object.defineProperty(exports, "getLogger", { enumerable: true, get: function () { return logger_2.getLogger; } });
194
+ Object.defineProperty(exports, "configureLogger", { enumerable: true, get: function () { return logger_2.configureLogger; } });
195
+ Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return logger_2.createLogger; } });
196
+ // Export upload utilities
197
+ var uploader_1 = require("./core/uploader");
198
+ Object.defineProperty(exports, "DirectUploader", { enumerable: true, get: function () { return uploader_1.DirectUploader; } });
199
+ var upload_helpers_1 = require("./core/upload-helpers");
200
+ Object.defineProperty(exports, "compressReplayEvents", { enumerable: true, get: function () { return upload_helpers_1.compressReplayEvents; } });
201
+ Object.defineProperty(exports, "canvasToBlob", { enumerable: true, get: function () { return upload_helpers_1.canvasToBlob; } });
202
+ Object.defineProperty(exports, "estimateCompressedReplaySize", { enumerable: true, get: function () { return upload_helpers_1.estimateCompressedReplaySize; } });
203
+ Object.defineProperty(exports, "isWithinSizeLimit", { enumerable: true, get: function () { return upload_helpers_1.isWithinSizeLimit; } });
204
+ // Export sanitization utilities
205
+ var sanitize_2 = require("./utils/sanitize");
206
+ Object.defineProperty(exports, "createSanitizer", { enumerable: true, get: function () { return sanitize_2.createSanitizer; } });
207
+ Object.defineProperty(exports, "Sanitizer", { enumerable: true, get: function () { return sanitize_2.Sanitizer; } });
208
+ // Export pattern configuration utilities
209
+ var sanitize_3 = require("./utils/sanitize");
210
+ Object.defineProperty(exports, "DEFAULT_PATTERNS", { enumerable: true, get: function () { return sanitize_3.DEFAULT_PATTERNS; } });
211
+ Object.defineProperty(exports, "PATTERN_PRESETS", { enumerable: true, get: function () { return sanitize_3.PATTERN_PRESETS; } });
212
+ Object.defineProperty(exports, "PATTERN_CATEGORIES", { enumerable: true, get: function () { return sanitize_3.PATTERN_CATEGORIES; } });
213
+ Object.defineProperty(exports, "PatternBuilder", { enumerable: true, get: function () { return sanitize_3.PatternBuilder; } });
214
+ Object.defineProperty(exports, "createPatternConfig", { enumerable: true, get: function () { return sanitize_3.createPatternConfig; } });
215
+ Object.defineProperty(exports, "getPattern", { enumerable: true, get: function () { return sanitize_3.getPattern; } });
216
+ Object.defineProperty(exports, "getPatternsByCategory", { enumerable: true, get: function () { return sanitize_3.getPatternsByCategory; } });
217
+ Object.defineProperty(exports, "validatePattern", { enumerable: true, get: function () { return sanitize_3.validatePattern; } });
218
+ // Export widget components
219
+ var button_2 = require("./widget/button");
220
+ Object.defineProperty(exports, "FloatingButton", { enumerable: true, get: function () { return button_2.FloatingButton; } });
221
+ var modal_2 = require("./widget/modal");
222
+ Object.defineProperty(exports, "BugReportModal", { enumerable: true, get: function () { return modal_2.BugReportModal; } });
223
+ /**
224
+ * Convenience function to sanitize text with default PII patterns
225
+ * Useful for quick sanitization without creating a Sanitizer instance
226
+ *
227
+ * @param text - Text to sanitize
228
+ * @returns Sanitized text with PII redacted
229
+ *
230
+ * @example
231
+ * ```typescript
232
+ * const sanitized = sanitize('Email: user@example.com');
233
+ * // Returns: 'Email: [REDACTED]'
234
+ * ```
235
+ */
236
+ function sanitize(text) {
237
+ const sanitizer = (0, sanitize_1.createSanitizer)({
238
+ enabled: true,
239
+ patterns: 'all',
240
+ customPatterns: [],
241
+ excludeSelectors: [],
242
+ });
243
+ return sanitizer.sanitize(text);
244
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Centralized logging utility for BugSpotter SDK
3
+ * Provides configurable logging with support for different log levels
4
+ */
5
+ export type LogLevel = 'debug' | 'log' | 'warn' | 'error' | 'none';
6
+ export interface Logger {
7
+ debug(message: string, ...args: unknown[]): void;
8
+ log(message: string, ...args: unknown[]): void;
9
+ warn(message: string, ...args: unknown[]): void;
10
+ error(message: string, ...args: unknown[]): void;
11
+ }
12
+ export interface LoggerConfig {
13
+ enabled?: boolean;
14
+ level?: LogLevel;
15
+ prefix?: string;
16
+ }
17
+ /**
18
+ * Get the default logger instance
19
+ */
20
+ export declare function getLogger(): Logger;
21
+ /**
22
+ * Configure the default logger
23
+ */
24
+ export declare function configureLogger(config: LoggerConfig): void;
25
+ /**
26
+ * Create a new logger instance with custom configuration
27
+ */
28
+ export declare function createLogger(config?: LoggerConfig): Logger;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * Centralized logging utility for BugSpotter SDK
4
+ * Provides configurable logging with support for different log levels
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getLogger = getLogger;
8
+ exports.configureLogger = configureLogger;
9
+ exports.createLogger = createLogger;
10
+ const LOG_LEVELS = {
11
+ debug: 0,
12
+ log: 1,
13
+ warn: 2,
14
+ error: 3,
15
+ none: 4,
16
+ };
17
+ class BugSpotterLogger {
18
+ constructor(config = {}) {
19
+ var _a, _b, _c;
20
+ this.enabled = (_a = config.enabled) !== null && _a !== void 0 ? _a : true;
21
+ this.level = (_b = config.level) !== null && _b !== void 0 ? _b : 'log';
22
+ this.prefix = (_c = config.prefix) !== null && _c !== void 0 ? _c : '[BugSpotter]';
23
+ }
24
+ shouldLog(level) {
25
+ if (!this.enabled) {
26
+ return false;
27
+ }
28
+ return LOG_LEVELS[level] >= LOG_LEVELS[this.level];
29
+ }
30
+ formatMessage(message) {
31
+ return this.prefix ? `${this.prefix} ${message}` : message;
32
+ }
33
+ debug(message, ...args) {
34
+ if (this.shouldLog('debug')) {
35
+ console.debug(this.formatMessage(message), ...args);
36
+ }
37
+ }
38
+ log(message, ...args) {
39
+ if (this.shouldLog('log')) {
40
+ console.log(this.formatMessage(message), ...args);
41
+ }
42
+ }
43
+ warn(message, ...args) {
44
+ if (this.shouldLog('warn')) {
45
+ console.warn(this.formatMessage(message), ...args);
46
+ }
47
+ }
48
+ error(message, ...args) {
49
+ if (this.shouldLog('error')) {
50
+ console.error(this.formatMessage(message), ...args);
51
+ }
52
+ }
53
+ configure(config) {
54
+ if (config.enabled !== undefined) {
55
+ this.enabled = config.enabled;
56
+ }
57
+ if (config.level !== undefined) {
58
+ this.level = config.level;
59
+ }
60
+ if (config.prefix !== undefined) {
61
+ this.prefix = config.prefix;
62
+ }
63
+ }
64
+ }
65
+ // Default logger instance
66
+ const defaultLogger = new BugSpotterLogger();
67
+ /**
68
+ * Get the default logger instance
69
+ */
70
+ function getLogger() {
71
+ return defaultLogger;
72
+ }
73
+ /**
74
+ * Configure the default logger
75
+ */
76
+ function configureLogger(config) {
77
+ defaultLogger.configure(config);
78
+ }
79
+ /**
80
+ * Create a new logger instance with custom configuration
81
+ */
82
+ function createLogger(config) {
83
+ return new BugSpotterLogger(config);
84
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * PII Pattern Definitions
3
+ * Configurable regex patterns for detecting sensitive data (PII + credentials)
4
+ */
5
+ export type PIIPatternName = 'email' | 'phone' | 'creditcard' | 'ssn' | 'iin' | 'ip' | 'apikey' | 'token' | 'password';
6
+ /**
7
+ * Pattern definition with metadata
8
+ */
9
+ export interface PatternDefinition {
10
+ /** Pattern name/identifier */
11
+ name: PIIPatternName;
12
+ /** Regular expression for detection */
13
+ regex: RegExp;
14
+ /** Human-readable description */
15
+ description: string;
16
+ /** Examples of data this pattern matches */
17
+ examples: string[];
18
+ /** Priority order (lower = higher priority, checked first) */
19
+ priority: number;
20
+ }
21
+ /**
22
+ * Default built-in patterns
23
+ */
24
+ export declare const DEFAULT_PATTERNS: Record<PIIPatternName, PatternDefinition>;
25
+ /**
26
+ * Pattern categories for grouping
27
+ */
28
+ export declare const PATTERN_CATEGORIES: {
29
+ readonly financial: PIIPatternName[];
30
+ readonly contact: PIIPatternName[];
31
+ readonly identification: PIIPatternName[];
32
+ readonly network: PIIPatternName[];
33
+ readonly credentials: PIIPatternName[];
34
+ readonly kazakhstan: PIIPatternName[];
35
+ };
36
+ /**
37
+ * Get patterns sorted by priority
38
+ */
39
+ export declare function getPatternsByPriority(patterns: PatternDefinition[]): PatternDefinition[];
40
+ /**
41
+ * Get pattern by name
42
+ */
43
+ export declare function getPattern(name: PIIPatternName): PatternDefinition;
44
+ /**
45
+ * Get patterns by category
46
+ */
47
+ export declare function getPatternsByCategory(category: keyof typeof PATTERN_CATEGORIES): PatternDefinition[];
48
+ /**
49
+ * Get all pattern names
50
+ */
51
+ export declare function getAllPatternNames(): PIIPatternName[];
52
+ /**
53
+ * Custom pattern builder for advanced use cases
54
+ */
55
+ export declare class PatternBuilder {
56
+ private pattern;
57
+ name(name: string): this;
58
+ regex(regex: RegExp): this;
59
+ description(description: string): this;
60
+ examples(examples: string[]): this;
61
+ priority(priority: number): this;
62
+ build(): PatternDefinition;
63
+ }
64
+ /**
65
+ * Pre-configured pattern sets for common use cases
66
+ */
67
+ export declare const PATTERN_PRESETS: {
68
+ /** All patterns enabled (PII + credentials) - default */
69
+ readonly all: PIIPatternName[];
70
+ /** Minimal - only most critical PII */
71
+ readonly minimal: PIIPatternName[];
72
+ /** Financial data only */
73
+ readonly financial: PIIPatternName[];
74
+ /** Contact information only */
75
+ readonly contact: PIIPatternName[];
76
+ /** Identification numbers only */
77
+ readonly identification: PIIPatternName[];
78
+ /** Credentials and secrets only */
79
+ readonly credentials: PIIPatternName[];
80
+ /** Kazakhstan-specific patterns */
81
+ readonly kazakhstan: PIIPatternName[];
82
+ /** GDPR compliance recommended set */
83
+ readonly gdpr: PIIPatternName[];
84
+ /** PCI DSS compliance required */
85
+ readonly pci: PIIPatternName[];
86
+ /** Security-focused: PII + credentials */
87
+ readonly security: PIIPatternName[];
88
+ };
89
+ /**
90
+ * Create custom pattern configuration
91
+ */
92
+ export declare function createPatternConfig(preset: keyof typeof PATTERN_PRESETS | PIIPatternName[]): PatternDefinition[];
93
+ /**
94
+ * Validate pattern regex
95
+ */
96
+ export declare function validatePattern(pattern: PatternDefinition): {
97
+ valid: boolean;
98
+ errors: string[];
99
+ };
100
+ /**
101
+ * Merge pattern configurations
102
+ */
103
+ export declare function mergePatternConfigs(...configs: PatternDefinition[][]): PatternDefinition[];