@blokjs/runner 0.2.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/dist/Blok.d.ts +19 -0
- package/dist/Blok.js +184 -0
- package/dist/Blok.js.map +1 -0
- package/dist/BlokResponse.d.ts +16 -0
- package/dist/BlokResponse.js +28 -0
- package/dist/BlokResponse.js.map +1 -0
- package/dist/Configuration.d.ts +37 -0
- package/dist/Configuration.js +248 -0
- package/dist/Configuration.js.map +1 -0
- package/dist/ConfigurationResolver.d.ts +7 -0
- package/dist/ConfigurationResolver.js +15 -0
- package/dist/ConfigurationResolver.js.map +1 -0
- package/dist/DefaultLogger.d.ts +65 -0
- package/dist/DefaultLogger.js +101 -0
- package/dist/DefaultLogger.js.map +1 -0
- package/dist/LocalStorage.d.ts +7 -0
- package/dist/LocalStorage.js +56 -0
- package/dist/LocalStorage.js.map +1 -0
- package/dist/MemoryUsage.d.ts +22 -0
- package/dist/MemoryUsage.js +83 -0
- package/dist/MemoryUsage.js.map +1 -0
- package/dist/NodeMap.d.ts +7 -0
- package/dist/NodeMap.js +13 -0
- package/dist/NodeMap.js.map +1 -0
- package/dist/ResolverBase.d.ts +8 -0
- package/dist/ResolverBase.js +18 -0
- package/dist/ResolverBase.js.map +1 -0
- package/dist/Runner.d.ts +25 -0
- package/dist/Runner.js +32 -0
- package/dist/Runner.js.map +1 -0
- package/dist/RunnerNode.d.ts +9 -0
- package/dist/RunnerNode.js +8 -0
- package/dist/RunnerNode.js.map +1 -0
- package/dist/RunnerNodeBase.d.ts +4 -0
- package/dist/RunnerNodeBase.js +3 -0
- package/dist/RunnerNodeBase.js.map +1 -0
- package/dist/RunnerSteps.d.ts +14 -0
- package/dist/RunnerSteps.js +110 -0
- package/dist/RunnerSteps.js.map +1 -0
- package/dist/RuntimeAdapterNode.d.ts +19 -0
- package/dist/RuntimeAdapterNode.js +87 -0
- package/dist/RuntimeAdapterNode.js.map +1 -0
- package/dist/RuntimeRegistry.d.ts +61 -0
- package/dist/RuntimeRegistry.js +87 -0
- package/dist/RuntimeRegistry.js.map +1 -0
- package/dist/TriggerBase.d.ts +119 -0
- package/dist/TriggerBase.js +413 -0
- package/dist/TriggerBase.js.map +1 -0
- package/dist/adapters/BunRuntimeAdapter.d.ts +38 -0
- package/dist/adapters/BunRuntimeAdapter.js +169 -0
- package/dist/adapters/BunRuntimeAdapter.js.map +1 -0
- package/dist/adapters/DockerRuntimeAdapter.d.ts +85 -0
- package/dist/adapters/DockerRuntimeAdapter.js +298 -0
- package/dist/adapters/DockerRuntimeAdapter.js.map +1 -0
- package/dist/adapters/HttpRuntimeAdapter.d.ts +58 -0
- package/dist/adapters/HttpRuntimeAdapter.js +152 -0
- package/dist/adapters/HttpRuntimeAdapter.js.map +1 -0
- package/dist/adapters/NodeJsRuntimeAdapter.d.ts +23 -0
- package/dist/adapters/NodeJsRuntimeAdapter.js +67 -0
- package/dist/adapters/NodeJsRuntimeAdapter.js.map +1 -0
- package/dist/adapters/RuntimeAdapter.d.ts +42 -0
- package/dist/adapters/RuntimeAdapter.js +2 -0
- package/dist/adapters/RuntimeAdapter.js.map +1 -0
- package/dist/adapters/WasmRuntimeAdapter.d.ts +69 -0
- package/dist/adapters/WasmRuntimeAdapter.js +279 -0
- package/dist/adapters/WasmRuntimeAdapter.js.map +1 -0
- package/dist/cache/NodeResultCache.d.ts +286 -0
- package/dist/cache/NodeResultCache.js +499 -0
- package/dist/cache/NodeResultCache.js.map +1 -0
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cost/CostEstimator.d.ts +57 -0
- package/dist/cost/CostEstimator.js +171 -0
- package/dist/cost/CostEstimator.js.map +1 -0
- package/dist/cost/index.d.ts +4 -0
- package/dist/cost/index.js +3 -0
- package/dist/cost/index.js.map +1 -0
- package/dist/cost/pricing.d.ts +24 -0
- package/dist/cost/pricing.js +169 -0
- package/dist/cost/pricing.js.map +1 -0
- package/dist/defineNode.d.ts +155 -0
- package/dist/defineNode.js +191 -0
- package/dist/defineNode.js.map +1 -0
- package/dist/graphql/GraphQLSchemaGenerator.d.ts +129 -0
- package/dist/graphql/GraphQLSchemaGenerator.js +425 -0
- package/dist/graphql/GraphQLSchemaGenerator.js.map +1 -0
- package/dist/hmr/FileWatcher.d.ts +62 -0
- package/dist/hmr/FileWatcher.js +185 -0
- package/dist/hmr/FileWatcher.js.map +1 -0
- package/dist/hmr/HmrDevConsole.d.ts +13 -0
- package/dist/hmr/HmrDevConsole.js +46 -0
- package/dist/hmr/HmrDevConsole.js.map +1 -0
- package/dist/hmr/HotReloadManager.d.ts +84 -0
- package/dist/hmr/HotReloadManager.js +195 -0
- package/dist/hmr/HotReloadManager.js.map +1 -0
- package/dist/hmr/index.d.ts +39 -0
- package/dist/hmr/index.js +38 -0
- package/dist/hmr/index.js.map +1 -0
- package/dist/index.d.ts +107 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/APMIntegration.d.ts +141 -0
- package/dist/integrations/APMIntegration.js +212 -0
- package/dist/integrations/APMIntegration.js.map +1 -0
- package/dist/integrations/AzureMonitorIntegration.d.ts +118 -0
- package/dist/integrations/AzureMonitorIntegration.js +254 -0
- package/dist/integrations/AzureMonitorIntegration.js.map +1 -0
- package/dist/integrations/CloudWatchIntegration.d.ts +135 -0
- package/dist/integrations/CloudWatchIntegration.js +293 -0
- package/dist/integrations/CloudWatchIntegration.js.map +1 -0
- package/dist/integrations/SentryIntegration.d.ts +153 -0
- package/dist/integrations/SentryIntegration.js +200 -0
- package/dist/integrations/SentryIntegration.js.map +1 -0
- package/dist/integrations/index.d.ts +19 -0
- package/dist/integrations/index.js +16 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/marketplace/RuntimeAutoScaler.d.ts +148 -0
- package/dist/marketplace/RuntimeAutoScaler.js +366 -0
- package/dist/marketplace/RuntimeAutoScaler.js.map +1 -0
- package/dist/marketplace/RuntimeCatalog.d.ts +174 -0
- package/dist/marketplace/RuntimeCatalog.js +339 -0
- package/dist/marketplace/RuntimeCatalog.js.map +1 -0
- package/dist/marketplace/RuntimeDiscovery.d.ts +86 -0
- package/dist/marketplace/RuntimeDiscovery.js +219 -0
- package/dist/marketplace/RuntimeDiscovery.js.map +1 -0
- package/dist/marketplace/RuntimeHealthMonitor.d.ts +100 -0
- package/dist/marketplace/RuntimeHealthMonitor.js +241 -0
- package/dist/marketplace/RuntimeHealthMonitor.js.map +1 -0
- package/dist/marketplace/RuntimeMetricsDashboard.d.ts +113 -0
- package/dist/marketplace/RuntimeMetricsDashboard.js +293 -0
- package/dist/marketplace/RuntimeMetricsDashboard.js.map +1 -0
- package/dist/monitoring/CircuitBreaker.d.ts +107 -0
- package/dist/monitoring/CircuitBreaker.js +238 -0
- package/dist/monitoring/CircuitBreaker.js.map +1 -0
- package/dist/monitoring/DistributedTracer.d.ts +125 -0
- package/dist/monitoring/DistributedTracer.js +230 -0
- package/dist/monitoring/DistributedTracer.js.map +1 -0
- package/dist/monitoring/HealthCheck.d.ts +54 -0
- package/dist/monitoring/HealthCheck.js +102 -0
- package/dist/monitoring/HealthCheck.js.map +1 -0
- package/dist/monitoring/PerformanceProfiler.d.ts +63 -0
- package/dist/monitoring/PerformanceProfiler.js +229 -0
- package/dist/monitoring/PerformanceProfiler.js.map +1 -0
- package/dist/monitoring/PrometheusBootstrap.d.ts +30 -0
- package/dist/monitoring/PrometheusBootstrap.js +71 -0
- package/dist/monitoring/PrometheusBootstrap.js.map +1 -0
- package/dist/monitoring/PrometheusMetricsBridge.d.ts +60 -0
- package/dist/monitoring/PrometheusMetricsBridge.js +216 -0
- package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -0
- package/dist/monitoring/RateLimiter.d.ts +58 -0
- package/dist/monitoring/RateLimiter.js +128 -0
- package/dist/monitoring/RateLimiter.js.map +1 -0
- package/dist/monitoring/StructuredLogger.d.ts +131 -0
- package/dist/monitoring/StructuredLogger.js +207 -0
- package/dist/monitoring/StructuredLogger.js.map +1 -0
- package/dist/monitoring/TracingBootstrap.d.ts +69 -0
- package/dist/monitoring/TracingBootstrap.js +129 -0
- package/dist/monitoring/TracingBootstrap.js.map +1 -0
- package/dist/monitoring/TriggerMetricsCollector.d.ts +94 -0
- package/dist/monitoring/TriggerMetricsCollector.js +174 -0
- package/dist/monitoring/TriggerMetricsCollector.js.map +1 -0
- package/dist/monitoring/index.d.ts +9 -0
- package/dist/monitoring/index.js +10 -0
- package/dist/monitoring/index.js.map +1 -0
- package/dist/openapi/OpenAPIGenerator.d.ts +192 -0
- package/dist/openapi/OpenAPIGenerator.js +373 -0
- package/dist/openapi/OpenAPIGenerator.js.map +1 -0
- package/dist/openapi/index.d.ts +20 -0
- package/dist/openapi/index.js +20 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/security/ABAC.d.ts +224 -0
- package/dist/security/ABAC.js +380 -0
- package/dist/security/ABAC.js.map +1 -0
- package/dist/security/AuditLogger.d.ts +242 -0
- package/dist/security/AuditLogger.js +317 -0
- package/dist/security/AuditLogger.js.map +1 -0
- package/dist/security/AuthMiddleware.d.ts +163 -0
- package/dist/security/AuthMiddleware.js +274 -0
- package/dist/security/AuthMiddleware.js.map +1 -0
- package/dist/security/EncryptionAtRest.d.ts +206 -0
- package/dist/security/EncryptionAtRest.js +236 -0
- package/dist/security/EncryptionAtRest.js.map +1 -0
- package/dist/security/OAuthProvider.d.ts +334 -0
- package/dist/security/OAuthProvider.js +719 -0
- package/dist/security/OAuthProvider.js.map +1 -0
- package/dist/security/PIIDetector.d.ts +233 -0
- package/dist/security/PIIDetector.js +354 -0
- package/dist/security/PIIDetector.js.map +1 -0
- package/dist/security/RBAC.d.ts +143 -0
- package/dist/security/RBAC.js +285 -0
- package/dist/security/RBAC.js.map +1 -0
- package/dist/security/SecretManager.d.ts +652 -0
- package/dist/security/SecretManager.js +1146 -0
- package/dist/security/SecretManager.js.map +1 -0
- package/dist/security/TLSConfig.d.ts +305 -0
- package/dist/security/TLSConfig.js +550 -0
- package/dist/security/TLSConfig.js.map +1 -0
- package/dist/security/index.d.ts +79 -0
- package/dist/security/index.js +80 -0
- package/dist/security/index.js.map +1 -0
- package/dist/testing/TestHarness.d.ts +189 -0
- package/dist/testing/TestHarness.js +272 -0
- package/dist/testing/TestHarness.js.map +1 -0
- package/dist/testing/TestLogger.d.ts +103 -0
- package/dist/testing/TestLogger.js +153 -0
- package/dist/testing/TestLogger.js.map +1 -0
- package/dist/testing/WorkflowTestRunner.d.ts +172 -0
- package/dist/testing/WorkflowTestRunner.js +355 -0
- package/dist/testing/WorkflowTestRunner.js.map +1 -0
- package/dist/testing/index.d.ts +21 -0
- package/dist/testing/index.js +22 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/tracing/InMemoryRunStore.d.ts +44 -0
- package/dist/tracing/InMemoryRunStore.js +341 -0
- package/dist/tracing/InMemoryRunStore.js.map +1 -0
- package/dist/tracing/PostgresRunStore.d.ts +82 -0
- package/dist/tracing/PostgresRunStore.js +640 -0
- package/dist/tracing/PostgresRunStore.js.map +1 -0
- package/dist/tracing/RunStore.d.ts +38 -0
- package/dist/tracing/RunStore.js +2 -0
- package/dist/tracing/RunStore.js.map +1 -0
- package/dist/tracing/RunTracker.d.ts +75 -0
- package/dist/tracing/RunTracker.js +374 -0
- package/dist/tracing/RunTracker.js.map +1 -0
- package/dist/tracing/SqliteRunStore.d.ts +53 -0
- package/dist/tracing/SqliteRunStore.js +703 -0
- package/dist/tracing/SqliteRunStore.js.map +1 -0
- package/dist/tracing/TraceRouter.d.ts +47 -0
- package/dist/tracing/TraceRouter.js +904 -0
- package/dist/tracing/TraceRouter.js.map +1 -0
- package/dist/tracing/TracingLogger.d.ts +21 -0
- package/dist/tracing/TracingLogger.js +62 -0
- package/dist/tracing/TracingLogger.js.map +1 -0
- package/dist/tracing/createStore.d.ts +30 -0
- package/dist/tracing/createStore.js +75 -0
- package/dist/tracing/createStore.js.map +1 -0
- package/dist/tracing/index.d.ts +13 -0
- package/dist/tracing/index.js +9 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/sanitize.d.ts +7 -0
- package/dist/tracing/sanitize.js +95 -0
- package/dist/tracing/sanitize.js.map +1 -0
- package/dist/tracing/types.d.ts +178 -0
- package/dist/tracing/types.js +3 -0
- package/dist/tracing/types.js.map +1 -0
- package/dist/types/Average.d.ts +11 -0
- package/dist/types/Average.js +2 -0
- package/dist/types/Average.js.map +1 -0
- package/dist/types/Condition.d.ts +8 -0
- package/dist/types/Condition.js +2 -0
- package/dist/types/Condition.js.map +1 -0
- package/dist/types/Conditions.d.ts +5 -0
- package/dist/types/Conditions.js +2 -0
- package/dist/types/Conditions.js.map +1 -0
- package/dist/types/Config.d.ts +12 -0
- package/dist/types/Config.js +2 -0
- package/dist/types/Config.js.map +1 -0
- package/dist/types/Flow.d.ts +5 -0
- package/dist/types/Flow.js +2 -0
- package/dist/types/Flow.js.map +1 -0
- package/dist/types/GlobalOptions.d.ts +11 -0
- package/dist/types/GlobalOptions.js +2 -0
- package/dist/types/GlobalOptions.js.map +1 -0
- package/dist/types/Inputs.d.ts +5 -0
- package/dist/types/Inputs.js +2 -0
- package/dist/types/Inputs.js.map +1 -0
- package/dist/types/JsonLikeObject.d.ts +3 -0
- package/dist/types/JsonLikeObject.js +2 -0
- package/dist/types/JsonLikeObject.js.map +1 -0
- package/dist/types/Mapper.d.ts +5 -0
- package/dist/types/Mapper.js +2 -0
- package/dist/types/Mapper.js.map +1 -0
- package/dist/types/Node.d.ts +10 -0
- package/dist/types/Node.js +2 -0
- package/dist/types/Node.js.map +1 -0
- package/dist/types/ParamsDictionary.d.ts +3 -0
- package/dist/types/ParamsDictionary.js +2 -0
- package/dist/types/ParamsDictionary.js.map +1 -0
- package/dist/types/Properties.d.ts +5 -0
- package/dist/types/Properties.js +2 -0
- package/dist/types/Properties.js.map +1 -0
- package/dist/types/Targets.d.ts +5 -0
- package/dist/types/Targets.js +2 -0
- package/dist/types/Targets.js.map +1 -0
- package/dist/types/Trigger.d.ts +5 -0
- package/dist/types/Trigger.js +2 -0
- package/dist/types/Trigger.js.map +1 -0
- package/dist/types/TriggerHttp.d.ts +7 -0
- package/dist/types/TriggerHttp.js +2 -0
- package/dist/types/TriggerHttp.js.map +1 -0
- package/dist/types/TriggerResponse.d.ts +6 -0
- package/dist/types/TriggerResponse.js +2 -0
- package/dist/types/TriggerResponse.js.map +1 -0
- package/dist/types/Triggers.d.ts +5 -0
- package/dist/types/Triggers.js +2 -0
- package/dist/types/Triggers.js.map +1 -0
- package/dist/types/TryCatch.d.ts +6 -0
- package/dist/types/TryCatch.js +2 -0
- package/dist/types/TryCatch.js.map +1 -0
- package/dist/visualization/NodeDependencyGraph.d.ts +76 -0
- package/dist/visualization/NodeDependencyGraph.js +418 -0
- package/dist/visualization/NodeDependencyGraph.js.map +1 -0
- package/dist/visualization/WorkflowVisualizer.d.ts +144 -0
- package/dist/visualization/WorkflowVisualizer.js +446 -0
- package/dist/visualization/WorkflowVisualizer.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OAuthProvider.js","sourceRoot":"","sources":["../../src/security/OAuthProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PII Detection and Masking for Blok Framework
|
|
3
|
+
*
|
|
4
|
+
* Detects and masks personally identifiable information (PII) in text and
|
|
5
|
+
* structured data:
|
|
6
|
+
* - Built-in patterns for email, phone, SSN, credit card, IP address, etc.
|
|
7
|
+
* - Luhn-algorithm-aware credit card detection
|
|
8
|
+
* - Configurable masking characters and length preservation
|
|
9
|
+
* - Deep object scanning with recursive string masking
|
|
10
|
+
* - Custom pattern support for domain-specific PII
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { PIIDetector, PIIType } from "@blokjs/runner";
|
|
15
|
+
*
|
|
16
|
+
* const detector = new PIIDetector({
|
|
17
|
+
* types: [PIIType.EMAIL, PIIType.PHONE, PIIType.SSN, PIIType.CREDIT_CARD],
|
|
18
|
+
* maskChar: "*",
|
|
19
|
+
* preserveLength: true,
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Detect PII in text
|
|
23
|
+
* const matches = detector.detect("Contact john@example.com or 555-123-4567");
|
|
24
|
+
*
|
|
25
|
+
* // Mask PII in text
|
|
26
|
+
* const masked = detector.mask("SSN: 123-45-6789");
|
|
27
|
+
* // => "SSN: ***-**-****"
|
|
28
|
+
*
|
|
29
|
+
* // Deep scan an object
|
|
30
|
+
* const result = detector.scan({ name: "John", email: "john@example.com" });
|
|
31
|
+
* console.log(result.totalMatches); // 1
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Categories of personally identifiable information that can be detected.
|
|
36
|
+
*/
|
|
37
|
+
export declare enum PIIType {
|
|
38
|
+
/** Email addresses (RFC 5322 simplified) */
|
|
39
|
+
EMAIL = "EMAIL",
|
|
40
|
+
/** Phone numbers (US and international formats) */
|
|
41
|
+
PHONE = "PHONE",
|
|
42
|
+
/** US Social Security Numbers */
|
|
43
|
+
SSN = "SSN",
|
|
44
|
+
/** Credit/debit card numbers (Luhn-validated) */
|
|
45
|
+
CREDIT_CARD = "CREDIT_CARD",
|
|
46
|
+
/** IPv4 and IPv6 addresses */
|
|
47
|
+
IP_ADDRESS = "IP_ADDRESS",
|
|
48
|
+
/** Dates of birth in common formats */
|
|
49
|
+
DATE_OF_BIRTH = "DATE_OF_BIRTH",
|
|
50
|
+
/** Person names (basic heuristic) */
|
|
51
|
+
NAME = "NAME",
|
|
52
|
+
/** Physical / mailing addresses (basic heuristic) */
|
|
53
|
+
ADDRESS = "ADDRESS",
|
|
54
|
+
/** Passport numbers (basic patterns) */
|
|
55
|
+
PASSPORT = "PASSPORT",
|
|
56
|
+
/** User-defined custom pattern */
|
|
57
|
+
CUSTOM = "CUSTOM"
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A custom PII pattern definition.
|
|
61
|
+
*/
|
|
62
|
+
export interface PIIPattern {
|
|
63
|
+
/** Identifier for this pattern (used as type label) */
|
|
64
|
+
type: string;
|
|
65
|
+
/** Regular expression to match the PII */
|
|
66
|
+
pattern: RegExp;
|
|
67
|
+
/** Function to produce the masked replacement for a match */
|
|
68
|
+
mask: (match: string) => string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A single PII match found in text.
|
|
72
|
+
*/
|
|
73
|
+
export interface PIIMatch {
|
|
74
|
+
/** The category of PII detected */
|
|
75
|
+
type: PIIType;
|
|
76
|
+
/** The original matched value */
|
|
77
|
+
value: string;
|
|
78
|
+
/** The masked replacement value */
|
|
79
|
+
masked: string;
|
|
80
|
+
/** Start index (inclusive) in the source string */
|
|
81
|
+
start: number;
|
|
82
|
+
/** End index (exclusive) in the source string */
|
|
83
|
+
end: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Result of a full PII scan.
|
|
87
|
+
*/
|
|
88
|
+
export interface PIIScanResult {
|
|
89
|
+
/** Total number of PII matches found */
|
|
90
|
+
totalMatches: number;
|
|
91
|
+
/** Count of matches grouped by PII type */
|
|
92
|
+
matchesByType: Record<string, number>;
|
|
93
|
+
/** Whether any PII was detected */
|
|
94
|
+
hasPII: boolean;
|
|
95
|
+
/** Detailed list of every match */
|
|
96
|
+
details: PIIMatch[];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Configuration for the {@link PIIDetector} class.
|
|
100
|
+
*/
|
|
101
|
+
export interface PIIDetectorConfig {
|
|
102
|
+
/**
|
|
103
|
+
* Built-in PII types to detect.
|
|
104
|
+
* @default All built-in types
|
|
105
|
+
*/
|
|
106
|
+
types?: PIIType[];
|
|
107
|
+
/**
|
|
108
|
+
* Additional custom patterns to detect.
|
|
109
|
+
*/
|
|
110
|
+
customPatterns?: PIIPattern[];
|
|
111
|
+
/**
|
|
112
|
+
* Character used for masking.
|
|
113
|
+
* @default "*"
|
|
114
|
+
*/
|
|
115
|
+
maskChar?: string;
|
|
116
|
+
/**
|
|
117
|
+
* Whether the masked output should preserve the original length.
|
|
118
|
+
* When false, a fixed-length mask is used.
|
|
119
|
+
* @default true
|
|
120
|
+
*/
|
|
121
|
+
preserveLength?: boolean;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Detects and masks personally identifiable information (PII) in text and
|
|
125
|
+
* structured data.
|
|
126
|
+
*
|
|
127
|
+
* The detector ships with built-in patterns for common PII categories and
|
|
128
|
+
* supports custom user-defined patterns. Credit card detection includes
|
|
129
|
+
* Luhn algorithm validation to reduce false positives.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* const detector = new PIIDetector();
|
|
134
|
+
* const matches = detector.detect("Email me at test@example.com");
|
|
135
|
+
* console.log(matches[0].type); // PIIType.EMAIL
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
export declare class PIIDetector {
|
|
139
|
+
private readonly types;
|
|
140
|
+
private readonly customPatterns;
|
|
141
|
+
private readonly maskChar;
|
|
142
|
+
private readonly preserveLength;
|
|
143
|
+
/**
|
|
144
|
+
* Create a new PIIDetector instance.
|
|
145
|
+
*
|
|
146
|
+
* @param config - Optional configuration overrides
|
|
147
|
+
*/
|
|
148
|
+
constructor(config?: PIIDetectorConfig);
|
|
149
|
+
/**
|
|
150
|
+
* Detect all PII occurrences in a text string.
|
|
151
|
+
*
|
|
152
|
+
* Returns an array of {@link PIIMatch} objects describing every match,
|
|
153
|
+
* including position information and masked values.
|
|
154
|
+
*
|
|
155
|
+
* @param text - The text to scan for PII
|
|
156
|
+
* @returns Array of PII matches sorted by start position
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```typescript
|
|
160
|
+
* const matches = detector.detect("SSN: 123-45-6789, email: a@b.com");
|
|
161
|
+
* // matches.length === 2
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
detect(text: string): PIIMatch[];
|
|
165
|
+
/**
|
|
166
|
+
* Mask all detected PII in a text string.
|
|
167
|
+
*
|
|
168
|
+
* Replaces every detected PII occurrence with its masked equivalent.
|
|
169
|
+
* Non-overlapping replacements are applied from right to left to preserve
|
|
170
|
+
* string positions.
|
|
171
|
+
*
|
|
172
|
+
* @param text - The text containing PII to mask
|
|
173
|
+
* @returns The text with all PII replaced by masked values
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* const masked = detector.mask("Call 555-123-4567");
|
|
178
|
+
* // => "Call ************"
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
mask(text: string): string;
|
|
182
|
+
/**
|
|
183
|
+
* Deep-clone an object and mask all PII found in string values.
|
|
184
|
+
*
|
|
185
|
+
* Recursively traverses the object tree. Every string property is run
|
|
186
|
+
* through {@link mask}. Non-string primitives, arrays, and nested objects
|
|
187
|
+
* are handled transparently.
|
|
188
|
+
*
|
|
189
|
+
* @typeParam T - Type of the input object
|
|
190
|
+
* @param obj - The object to scan and mask
|
|
191
|
+
* @returns A deep clone with all string values masked
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* const safe = detector.maskObject({ email: "john@example.com", age: 30 });
|
|
196
|
+
* // safe.email === "****************"
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
maskObject<T>(obj: T): T;
|
|
200
|
+
/**
|
|
201
|
+
* Perform a full PII scan on arbitrary data and return a summary report.
|
|
202
|
+
*
|
|
203
|
+
* Accepts strings, objects, arrays, or any JSON-compatible value.
|
|
204
|
+
* Strings are scanned directly; objects are serialized and scanned.
|
|
205
|
+
*
|
|
206
|
+
* @param data - The data to scan (string, object, array, or primitive)
|
|
207
|
+
* @returns A {@link PIIScanResult} with totals, type breakdown, and details
|
|
208
|
+
*
|
|
209
|
+
* @example
|
|
210
|
+
* ```typescript
|
|
211
|
+
* const report = detector.scan({
|
|
212
|
+
* user: { email: "a@b.com", phone: "555-123-4567" },
|
|
213
|
+
* });
|
|
214
|
+
* console.log(report.hasPII); // true
|
|
215
|
+
* console.log(report.totalMatches); // 2
|
|
216
|
+
* ```
|
|
217
|
+
*/
|
|
218
|
+
scan(data: unknown): PIIScanResult;
|
|
219
|
+
/**
|
|
220
|
+
* Produce a masked string for a PII value.
|
|
221
|
+
*
|
|
222
|
+
* @param value - The original PII string
|
|
223
|
+
* @returns Masked string using the configured mask character
|
|
224
|
+
*/
|
|
225
|
+
private maskValue;
|
|
226
|
+
/**
|
|
227
|
+
* Recursively deep-clone and mask all string values in a value.
|
|
228
|
+
*
|
|
229
|
+
* @param value - Any JSON-compatible value
|
|
230
|
+
* @returns Deep-cloned value with strings masked
|
|
231
|
+
*/
|
|
232
|
+
private deepMask;
|
|
233
|
+
}
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PII Detection and Masking for Blok Framework
|
|
3
|
+
*
|
|
4
|
+
* Detects and masks personally identifiable information (PII) in text and
|
|
5
|
+
* structured data:
|
|
6
|
+
* - Built-in patterns for email, phone, SSN, credit card, IP address, etc.
|
|
7
|
+
* - Luhn-algorithm-aware credit card detection
|
|
8
|
+
* - Configurable masking characters and length preservation
|
|
9
|
+
* - Deep object scanning with recursive string masking
|
|
10
|
+
* - Custom pattern support for domain-specific PII
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { PIIDetector, PIIType } from "@blokjs/runner";
|
|
15
|
+
*
|
|
16
|
+
* const detector = new PIIDetector({
|
|
17
|
+
* types: [PIIType.EMAIL, PIIType.PHONE, PIIType.SSN, PIIType.CREDIT_CARD],
|
|
18
|
+
* maskChar: "*",
|
|
19
|
+
* preserveLength: true,
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Detect PII in text
|
|
23
|
+
* const matches = detector.detect("Contact john@example.com or 555-123-4567");
|
|
24
|
+
*
|
|
25
|
+
* // Mask PII in text
|
|
26
|
+
* const masked = detector.mask("SSN: 123-45-6789");
|
|
27
|
+
* // => "SSN: ***-**-****"
|
|
28
|
+
*
|
|
29
|
+
* // Deep scan an object
|
|
30
|
+
* const result = detector.scan({ name: "John", email: "john@example.com" });
|
|
31
|
+
* console.log(result.totalMatches); // 1
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Types & Enums
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
/**
|
|
38
|
+
* Categories of personally identifiable information that can be detected.
|
|
39
|
+
*/
|
|
40
|
+
export var PIIType;
|
|
41
|
+
(function (PIIType) {
|
|
42
|
+
/** Email addresses (RFC 5322 simplified) */
|
|
43
|
+
PIIType["EMAIL"] = "EMAIL";
|
|
44
|
+
/** Phone numbers (US and international formats) */
|
|
45
|
+
PIIType["PHONE"] = "PHONE";
|
|
46
|
+
/** US Social Security Numbers */
|
|
47
|
+
PIIType["SSN"] = "SSN";
|
|
48
|
+
/** Credit/debit card numbers (Luhn-validated) */
|
|
49
|
+
PIIType["CREDIT_CARD"] = "CREDIT_CARD";
|
|
50
|
+
/** IPv4 and IPv6 addresses */
|
|
51
|
+
PIIType["IP_ADDRESS"] = "IP_ADDRESS";
|
|
52
|
+
/** Dates of birth in common formats */
|
|
53
|
+
PIIType["DATE_OF_BIRTH"] = "DATE_OF_BIRTH";
|
|
54
|
+
/** Person names (basic heuristic) */
|
|
55
|
+
PIIType["NAME"] = "NAME";
|
|
56
|
+
/** Physical / mailing addresses (basic heuristic) */
|
|
57
|
+
PIIType["ADDRESS"] = "ADDRESS";
|
|
58
|
+
/** Passport numbers (basic patterns) */
|
|
59
|
+
PIIType["PASSPORT"] = "PASSPORT";
|
|
60
|
+
/** User-defined custom pattern */
|
|
61
|
+
PIIType["CUSTOM"] = "CUSTOM";
|
|
62
|
+
})(PIIType || (PIIType = {}));
|
|
63
|
+
/**
|
|
64
|
+
* Luhn algorithm check for credit card number validation.
|
|
65
|
+
*
|
|
66
|
+
* @param digits - String of digits (spaces/dashes stripped)
|
|
67
|
+
* @returns True if the number passes the Luhn check
|
|
68
|
+
*/
|
|
69
|
+
function luhnCheck(digits) {
|
|
70
|
+
const nums = digits.replace(/\D/g, "");
|
|
71
|
+
if (nums.length < 13 || nums.length > 19)
|
|
72
|
+
return false;
|
|
73
|
+
let sum = 0;
|
|
74
|
+
let alternate = false;
|
|
75
|
+
for (let i = nums.length - 1; i >= 0; i--) {
|
|
76
|
+
let n = Number.parseInt(nums[i], 10);
|
|
77
|
+
if (alternate) {
|
|
78
|
+
n *= 2;
|
|
79
|
+
if (n > 9)
|
|
80
|
+
n -= 9;
|
|
81
|
+
}
|
|
82
|
+
sum += n;
|
|
83
|
+
alternate = !alternate;
|
|
84
|
+
}
|
|
85
|
+
return sum % 10 === 0;
|
|
86
|
+
}
|
|
87
|
+
const BUILT_IN_RULES = [
|
|
88
|
+
{
|
|
89
|
+
type: PIIType.EMAIL,
|
|
90
|
+
// Simplified RFC 5322 email pattern
|
|
91
|
+
pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: PIIType.PHONE,
|
|
95
|
+
// US formats: (555) 123-4567, 555-123-4567, +1-555-123-4567
|
|
96
|
+
// International: +44 20 7946 0958, +49 30 1234567
|
|
97
|
+
pattern: /(?:\+?\d{1,3}[-.\s]?)?\(?\d{2,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{4}/g,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
type: PIIType.SSN,
|
|
101
|
+
// US SSN: 123-45-6789 or 123456789
|
|
102
|
+
pattern: /\b\d{3}-\d{2}-\d{4}\b|\b\d{9}\b/g,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: PIIType.CREDIT_CARD,
|
|
106
|
+
// 13-19 digit numbers, optionally separated by spaces or dashes
|
|
107
|
+
pattern: /\b(?:\d[ -]*?){13,19}\b/g,
|
|
108
|
+
validate: (match) => luhnCheck(match),
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: PIIType.IP_ADDRESS,
|
|
112
|
+
// IPv4
|
|
113
|
+
pattern: /\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b|(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}/g,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: PIIType.DATE_OF_BIRTH,
|
|
117
|
+
// Common DOB formats: MM/DD/YYYY, DD-MM-YYYY, YYYY-MM-DD
|
|
118
|
+
pattern: /\b(?:\d{1,2}[/-]\d{1,2}[/-]\d{2,4}|\d{4}[/-]\d{1,2}[/-]\d{1,2})\b/g,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: PIIType.PASSPORT,
|
|
122
|
+
// Simple passport patterns (US: 9 digits; UK: 9 digits; generic alphanumeric 6-9)
|
|
123
|
+
pattern: /\b[A-Z]{1,2}\d{6,9}\b/g,
|
|
124
|
+
},
|
|
125
|
+
];
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// Implementation
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
/**
|
|
130
|
+
* Detects and masks personally identifiable information (PII) in text and
|
|
131
|
+
* structured data.
|
|
132
|
+
*
|
|
133
|
+
* The detector ships with built-in patterns for common PII categories and
|
|
134
|
+
* supports custom user-defined patterns. Credit card detection includes
|
|
135
|
+
* Luhn algorithm validation to reduce false positives.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* const detector = new PIIDetector();
|
|
140
|
+
* const matches = detector.detect("Email me at test@example.com");
|
|
141
|
+
* console.log(matches[0].type); // PIIType.EMAIL
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export class PIIDetector {
|
|
145
|
+
types;
|
|
146
|
+
customPatterns;
|
|
147
|
+
maskChar;
|
|
148
|
+
preserveLength;
|
|
149
|
+
/**
|
|
150
|
+
* Create a new PIIDetector instance.
|
|
151
|
+
*
|
|
152
|
+
* @param config - Optional configuration overrides
|
|
153
|
+
*/
|
|
154
|
+
constructor(config) {
|
|
155
|
+
this.types = new Set(config?.types ?? [
|
|
156
|
+
PIIType.EMAIL,
|
|
157
|
+
PIIType.PHONE,
|
|
158
|
+
PIIType.SSN,
|
|
159
|
+
PIIType.CREDIT_CARD,
|
|
160
|
+
PIIType.IP_ADDRESS,
|
|
161
|
+
PIIType.DATE_OF_BIRTH,
|
|
162
|
+
PIIType.PASSPORT,
|
|
163
|
+
]);
|
|
164
|
+
this.customPatterns = config?.customPatterns ?? [];
|
|
165
|
+
this.maskChar = config?.maskChar ?? "*";
|
|
166
|
+
this.preserveLength = config?.preserveLength ?? true;
|
|
167
|
+
}
|
|
168
|
+
// -----------------------------------------------------------------------
|
|
169
|
+
// Public API
|
|
170
|
+
// -----------------------------------------------------------------------
|
|
171
|
+
/**
|
|
172
|
+
* Detect all PII occurrences in a text string.
|
|
173
|
+
*
|
|
174
|
+
* Returns an array of {@link PIIMatch} objects describing every match,
|
|
175
|
+
* including position information and masked values.
|
|
176
|
+
*
|
|
177
|
+
* @param text - The text to scan for PII
|
|
178
|
+
* @returns Array of PII matches sorted by start position
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* const matches = detector.detect("SSN: 123-45-6789, email: a@b.com");
|
|
183
|
+
* // matches.length === 2
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
detect(text) {
|
|
187
|
+
const matches = [];
|
|
188
|
+
// Run built-in rules
|
|
189
|
+
for (const rule of BUILT_IN_RULES) {
|
|
190
|
+
if (!this.types.has(rule.type))
|
|
191
|
+
continue;
|
|
192
|
+
// Reset lastIndex for global regexes
|
|
193
|
+
const regex = new RegExp(rule.pattern.source, rule.pattern.flags);
|
|
194
|
+
let match = regex.exec(text);
|
|
195
|
+
while (match !== null) {
|
|
196
|
+
const value = match[0];
|
|
197
|
+
// Apply optional validator (e.g. Luhn for credit cards)
|
|
198
|
+
if (rule.validate && !rule.validate(value)) {
|
|
199
|
+
match = regex.exec(text);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
matches.push({
|
|
203
|
+
type: rule.type,
|
|
204
|
+
value,
|
|
205
|
+
masked: this.maskValue(value),
|
|
206
|
+
start: match.index,
|
|
207
|
+
end: match.index + value.length,
|
|
208
|
+
});
|
|
209
|
+
match = regex.exec(text);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// Run custom patterns
|
|
213
|
+
for (const custom of this.customPatterns) {
|
|
214
|
+
const regex = new RegExp(custom.pattern.source, custom.pattern.flags);
|
|
215
|
+
let match = regex.exec(text);
|
|
216
|
+
while (match !== null) {
|
|
217
|
+
const value = match[0];
|
|
218
|
+
matches.push({
|
|
219
|
+
type: PIIType.CUSTOM,
|
|
220
|
+
value,
|
|
221
|
+
masked: custom.mask(value),
|
|
222
|
+
start: match.index,
|
|
223
|
+
end: match.index + value.length,
|
|
224
|
+
});
|
|
225
|
+
match = regex.exec(text);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Sort by position in text
|
|
229
|
+
matches.sort((a, b) => a.start - b.start);
|
|
230
|
+
return matches;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Mask all detected PII in a text string.
|
|
234
|
+
*
|
|
235
|
+
* Replaces every detected PII occurrence with its masked equivalent.
|
|
236
|
+
* Non-overlapping replacements are applied from right to left to preserve
|
|
237
|
+
* string positions.
|
|
238
|
+
*
|
|
239
|
+
* @param text - The text containing PII to mask
|
|
240
|
+
* @returns The text with all PII replaced by masked values
|
|
241
|
+
*
|
|
242
|
+
* @example
|
|
243
|
+
* ```typescript
|
|
244
|
+
* const masked = detector.mask("Call 555-123-4567");
|
|
245
|
+
* // => "Call ************"
|
|
246
|
+
* ```
|
|
247
|
+
*/
|
|
248
|
+
mask(text) {
|
|
249
|
+
const matches = this.detect(text);
|
|
250
|
+
if (matches.length === 0)
|
|
251
|
+
return text;
|
|
252
|
+
// Apply replacements from right to left to preserve indices
|
|
253
|
+
let result = text;
|
|
254
|
+
for (let i = matches.length - 1; i >= 0; i--) {
|
|
255
|
+
const m = matches[i];
|
|
256
|
+
result = result.slice(0, m.start) + m.masked + result.slice(m.end);
|
|
257
|
+
}
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Deep-clone an object and mask all PII found in string values.
|
|
262
|
+
*
|
|
263
|
+
* Recursively traverses the object tree. Every string property is run
|
|
264
|
+
* through {@link mask}. Non-string primitives, arrays, and nested objects
|
|
265
|
+
* are handled transparently.
|
|
266
|
+
*
|
|
267
|
+
* @typeParam T - Type of the input object
|
|
268
|
+
* @param obj - The object to scan and mask
|
|
269
|
+
* @returns A deep clone with all string values masked
|
|
270
|
+
*
|
|
271
|
+
* @example
|
|
272
|
+
* ```typescript
|
|
273
|
+
* const safe = detector.maskObject({ email: "john@example.com", age: 30 });
|
|
274
|
+
* // safe.email === "****************"
|
|
275
|
+
* ```
|
|
276
|
+
*/
|
|
277
|
+
maskObject(obj) {
|
|
278
|
+
return this.deepMask(obj);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Perform a full PII scan on arbitrary data and return a summary report.
|
|
282
|
+
*
|
|
283
|
+
* Accepts strings, objects, arrays, or any JSON-compatible value.
|
|
284
|
+
* Strings are scanned directly; objects are serialized and scanned.
|
|
285
|
+
*
|
|
286
|
+
* @param data - The data to scan (string, object, array, or primitive)
|
|
287
|
+
* @returns A {@link PIIScanResult} with totals, type breakdown, and details
|
|
288
|
+
*
|
|
289
|
+
* @example
|
|
290
|
+
* ```typescript
|
|
291
|
+
* const report = detector.scan({
|
|
292
|
+
* user: { email: "a@b.com", phone: "555-123-4567" },
|
|
293
|
+
* });
|
|
294
|
+
* console.log(report.hasPII); // true
|
|
295
|
+
* console.log(report.totalMatches); // 2
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
scan(data) {
|
|
299
|
+
const text = typeof data === "string" ? data : JSON.stringify(data);
|
|
300
|
+
const details = this.detect(text);
|
|
301
|
+
const matchesByType = {};
|
|
302
|
+
for (const match of details) {
|
|
303
|
+
matchesByType[match.type] = (matchesByType[match.type] ?? 0) + 1;
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
totalMatches: details.length,
|
|
307
|
+
matchesByType,
|
|
308
|
+
hasPII: details.length > 0,
|
|
309
|
+
details,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
// -----------------------------------------------------------------------
|
|
313
|
+
// Private helpers
|
|
314
|
+
// -----------------------------------------------------------------------
|
|
315
|
+
/**
|
|
316
|
+
* Produce a masked string for a PII value.
|
|
317
|
+
*
|
|
318
|
+
* @param value - The original PII string
|
|
319
|
+
* @returns Masked string using the configured mask character
|
|
320
|
+
*/
|
|
321
|
+
maskValue(value) {
|
|
322
|
+
if (this.preserveLength) {
|
|
323
|
+
return value.replace(/[^\s\-/]/g, this.maskChar);
|
|
324
|
+
}
|
|
325
|
+
// Fixed-length mask (8 characters)
|
|
326
|
+
return this.maskChar.repeat(8);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Recursively deep-clone and mask all string values in a value.
|
|
330
|
+
*
|
|
331
|
+
* @param value - Any JSON-compatible value
|
|
332
|
+
* @returns Deep-cloned value with strings masked
|
|
333
|
+
*/
|
|
334
|
+
deepMask(value) {
|
|
335
|
+
if (value === null || value === undefined)
|
|
336
|
+
return value;
|
|
337
|
+
if (typeof value === "string") {
|
|
338
|
+
return this.mask(value);
|
|
339
|
+
}
|
|
340
|
+
if (Array.isArray(value)) {
|
|
341
|
+
return value.map((item) => this.deepMask(item));
|
|
342
|
+
}
|
|
343
|
+
if (typeof value === "object") {
|
|
344
|
+
const result = {};
|
|
345
|
+
for (const [key, val] of Object.entries(value)) {
|
|
346
|
+
result[key] = this.deepMask(val);
|
|
347
|
+
}
|
|
348
|
+
return result;
|
|
349
|
+
}
|
|
350
|
+
// Primitives (number, boolean) pass through
|
|
351
|
+
return value;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=PIIDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PIIDetector.js","sourceRoot":"","sources":["../../src/security/PIIDetector.ts"],"names":[],"mappings":"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"}
|