@sparkleideas/browser 3.0.0-alpha.7 → 3.0.0-alpha.9

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/.agentic-flow/intelligence.json +17 -0
  2. package/agents/architect.yaml +1 -1
  3. package/agents/coder.yaml +1 -1
  4. package/agents/reviewer.yaml +1 -1
  5. package/agents/security-architect.yaml +1 -1
  6. package/agents/tester.yaml +1 -1
  7. package/dist/agent/index.d.ts +25 -0
  8. package/dist/agent/index.d.ts.map +1 -0
  9. package/dist/agent/index.js +33 -0
  10. package/dist/agent/index.js.map +1 -0
  11. package/dist/application/browser-service.d.ts +228 -0
  12. package/dist/application/browser-service.d.ts.map +1 -0
  13. package/dist/application/browser-service.js +470 -0
  14. package/dist/application/browser-service.js.map +1 -0
  15. package/dist/domain/types.d.ts +428 -0
  16. package/dist/domain/types.d.ts.map +1 -0
  17. package/dist/domain/types.js +95 -0
  18. package/dist/domain/types.js.map +1 -0
  19. package/dist/index.d.ts +131 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +84 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/infrastructure/agent-browser-adapter.d.ts +134 -0
  24. package/dist/infrastructure/agent-browser-adapter.d.ts.map +1 -0
  25. package/dist/infrastructure/agent-browser-adapter.js +551 -0
  26. package/dist/infrastructure/agent-browser-adapter.js.map +1 -0
  27. package/dist/infrastructure/hooks-integration.d.ts +109 -0
  28. package/dist/infrastructure/hooks-integration.d.ts.map +1 -0
  29. package/dist/infrastructure/hooks-integration.js +111 -0
  30. package/dist/infrastructure/hooks-integration.js.map +1 -0
  31. package/dist/infrastructure/memory-integration.d.ts +149 -0
  32. package/dist/infrastructure/memory-integration.d.ts.map +1 -0
  33. package/dist/infrastructure/memory-integration.js +335 -0
  34. package/dist/infrastructure/memory-integration.js.map +1 -0
  35. package/dist/infrastructure/reasoningbank-adapter.d.ts +90 -0
  36. package/dist/infrastructure/reasoningbank-adapter.d.ts.map +1 -0
  37. package/dist/infrastructure/reasoningbank-adapter.js +224 -0
  38. package/dist/infrastructure/reasoningbank-adapter.js.map +1 -0
  39. package/dist/infrastructure/security-integration.d.ts +80 -0
  40. package/dist/infrastructure/security-integration.d.ts.map +1 -0
  41. package/dist/infrastructure/security-integration.js +404 -0
  42. package/dist/infrastructure/security-integration.js.map +1 -0
  43. package/dist/infrastructure/workflow-templates.d.ts +95 -0
  44. package/dist/infrastructure/workflow-templates.d.ts.map +1 -0
  45. package/dist/infrastructure/workflow-templates.js +366 -0
  46. package/dist/infrastructure/workflow-templates.js.map +1 -0
  47. package/dist/mcp-tools/browser-tools.d.ts +18 -0
  48. package/dist/mcp-tools/browser-tools.d.ts.map +1 -0
  49. package/dist/mcp-tools/browser-tools.js +1163 -0
  50. package/dist/mcp-tools/browser-tools.js.map +1 -0
  51. package/dist/mcp-tools/index.d.ts +6 -0
  52. package/dist/mcp-tools/index.d.ts.map +1 -0
  53. package/dist/mcp-tools/index.js +6 -0
  54. package/dist/mcp-tools/index.js.map +1 -0
  55. package/dist/skill/index.d.ts +15 -0
  56. package/dist/skill/index.d.ts.map +1 -0
  57. package/dist/skill/index.js +23 -0
  58. package/dist/skill/index.js.map +1 -0
  59. package/package.json +3 -4
  60. package/src/application/browser-service.ts +1 -1
  61. package/src/domain/types.ts +1 -1
  62. package/src/index.ts +2 -2
  63. package/src/infrastructure/hooks-integration.ts +1 -1
  64. package/src/infrastructure/memory-integration.ts +2 -2
  65. package/src/infrastructure/reasoningbank-adapter.ts +1 -1
  66. package/src/mcp-tools/browser-tools.ts +1 -1
  67. package/src/skill/index.ts +1 -1
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @sparkleideas/browser - Security Integration
3
+ * AIDefence integration for URL validation, PII detection, and threat scanning
4
+ */
5
+ import { z } from 'zod';
6
+ export interface ThreatScanResult {
7
+ safe: boolean;
8
+ threats: Threat[];
9
+ pii: PIIMatch[];
10
+ score: number;
11
+ scanDuration: number;
12
+ }
13
+ export interface Threat {
14
+ type: ThreatType;
15
+ severity: 'low' | 'medium' | 'high' | 'critical';
16
+ description: string;
17
+ location?: string;
18
+ mitigation?: string;
19
+ }
20
+ export type ThreatType = 'xss' | 'injection' | 'phishing' | 'malware' | 'data-exfiltration' | 'credential-theft' | 'insecure-protocol' | 'suspicious-redirect' | 'blocked-domain';
21
+ export interface PIIMatch {
22
+ type: PIIType;
23
+ value: string;
24
+ masked: string;
25
+ location: string;
26
+ confidence: number;
27
+ }
28
+ export type PIIType = 'email' | 'phone' | 'ssn' | 'credit-card' | 'api-key' | 'password' | 'address' | 'name';
29
+ export interface SecurityConfig {
30
+ enableUrlValidation: boolean;
31
+ enablePIIDetection: boolean;
32
+ enableThreatScanning: boolean;
33
+ blockedDomains: string[];
34
+ allowedDomains: string[];
35
+ maxRedirects: number;
36
+ requireHttps: boolean;
37
+ piiMaskingEnabled: boolean;
38
+ }
39
+ export declare const URLValidationSchema: z.ZodEffects<z.ZodString, string, string>;
40
+ export declare class BrowserSecurityScanner {
41
+ private config;
42
+ constructor(config?: Partial<SecurityConfig>);
43
+ /**
44
+ * Full security scan of a URL before navigation
45
+ */
46
+ scanUrl(url: string): Promise<ThreatScanResult>;
47
+ /**
48
+ * Scan content for PII before filling forms
49
+ */
50
+ scanContent(content: string, context?: string): ThreatScanResult;
51
+ /**
52
+ * Validate input before filling a form field
53
+ */
54
+ validateInput(value: string, fieldType: string): ThreatScanResult;
55
+ /**
56
+ * Sanitize input by removing detected threats
57
+ */
58
+ sanitizeInput(value: string): string;
59
+ /**
60
+ * Mask PII for safe logging/display
61
+ */
62
+ maskPII(value: string, type: PIIType): string;
63
+ private validateUrl;
64
+ private isBlockedDomain;
65
+ private detectPhishing;
66
+ private containsInjection;
67
+ private containsXSS;
68
+ private calculateSafetyScore;
69
+ private calculatePIIConfidence;
70
+ }
71
+ export declare function getSecurityScanner(config?: Partial<SecurityConfig>): BrowserSecurityScanner;
72
+ /**
73
+ * Quick check if a URL is safe to navigate
74
+ */
75
+ export declare function isUrlSafe(url: string): Promise<boolean>;
76
+ /**
77
+ * Quick check if content contains PII
78
+ */
79
+ export declare function containsPII(content: string): boolean;
80
+ //# sourceMappingURL=security-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-integration.d.ts","sourceRoot":"","sources":["../../src/infrastructure/security-integration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,EAAE,QAAQ,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,WAAW,GACX,UAAU,GACV,SAAS,GACT,mBAAmB,GACnB,kBAAkB,GAClB,mBAAmB,GACnB,qBAAqB,GACrB,gBAAgB,CAAC;AAErB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,OAAO,GACf,OAAO,GACP,OAAO,GACP,KAAK,GACL,aAAa,GACb,SAAS,GACT,UAAU,GACV,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,WAAW,cAAc;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAMD,eAAO,MAAM,mBAAmB,2CAU/B,CAAC;AA6CF,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAchD;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwCrD;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAkB,GAAG,gBAAgB;IA+C3E;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAyCjE;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAoBpC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM;IAyB7C,OAAO,CAAC,WAAW;IAkDnB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,sBAAsB;CAe/B;AAQD,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,sBAAsB,CAK3F;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI7D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIpD"}
@@ -0,0 +1,404 @@
1
+ /**
2
+ * @sparkleideas/browser - Security Integration
3
+ * AIDefence integration for URL validation, PII detection, and threat scanning
4
+ */
5
+ import { z } from 'zod';
6
+ // ============================================================================
7
+ // Validation Schemas
8
+ // ============================================================================
9
+ export const URLValidationSchema = z.string().url().refine((url) => {
10
+ try {
11
+ const parsed = new URL(url);
12
+ return ['http:', 'https:'].includes(parsed.protocol);
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ }, { message: 'Invalid URL or unsupported protocol' });
18
+ // ============================================================================
19
+ // PII Detection Patterns
20
+ // ============================================================================
21
+ const PII_PATTERNS = {
22
+ email: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
23
+ phone: /\b(\+?1[-.\s]?)?(\(?\d{3}\)?[-.\s]?)?\d{3}[-.\s]?\d{4}\b/g,
24
+ ssn: /\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g,
25
+ 'credit-card': /\b(?:\d{4}[-\s]?){3}\d{4}\b/g,
26
+ 'api-key': /\b(?:sk[-_]|api[-_]?key[-_]?|token[-_]?)[a-zA-Z0-9]{20,}\b/gi,
27
+ password: /(?:password|passwd|pwd)[\s:=]+[^\s]{6,}/gi,
28
+ address: /\b\d+\s+[\w\s]+(?:street|st|avenue|ave|road|rd|boulevard|blvd|drive|dr|lane|ln|way|court|ct)\b/gi,
29
+ name: /(?:^|\s)(?:Mr|Mrs|Ms|Dr|Prof)\.?\s+[A-Z][a-z]+\s+[A-Z][a-z]+(?:\s|$)/g,
30
+ };
31
+ // ============================================================================
32
+ // Known Threats
33
+ // ============================================================================
34
+ const PHISHING_INDICATORS = [
35
+ 'login-verify',
36
+ 'account-update',
37
+ 'security-alert',
38
+ 'verify-account',
39
+ 'suspended-account',
40
+ 'confirm-identity',
41
+ 'unusual-activity',
42
+ ];
43
+ const SUSPICIOUS_TLDs = ['.tk', '.ml', '.ga', '.cf', '.gq', '.xyz', '.top', '.work', '.click'];
44
+ const BLOCKED_DOMAINS_DEFAULT = [
45
+ 'bit.ly', // URL shorteners (can hide malicious URLs)
46
+ 'tinyurl.com',
47
+ 'goo.gl',
48
+ 't.co',
49
+ // Add more as needed
50
+ ];
51
+ // ============================================================================
52
+ // Security Scanner Class
53
+ // ============================================================================
54
+ export class BrowserSecurityScanner {
55
+ config;
56
+ constructor(config = {}) {
57
+ this.config = {
58
+ enableUrlValidation: true,
59
+ enablePIIDetection: true,
60
+ enableThreatScanning: true,
61
+ blockedDomains: [...BLOCKED_DOMAINS_DEFAULT],
62
+ allowedDomains: [],
63
+ maxRedirects: 5,
64
+ requireHttps: true,
65
+ piiMaskingEnabled: true,
66
+ ...config,
67
+ };
68
+ }
69
+ /**
70
+ * Full security scan of a URL before navigation
71
+ */
72
+ async scanUrl(url) {
73
+ const startTime = Date.now();
74
+ const threats = [];
75
+ const pii = [];
76
+ // Validate URL format
77
+ if (this.config.enableUrlValidation) {
78
+ const urlThreats = this.validateUrl(url);
79
+ threats.push(...urlThreats);
80
+ }
81
+ // Check for blocked domains
82
+ if (this.isBlockedDomain(url)) {
83
+ threats.push({
84
+ type: 'blocked-domain',
85
+ severity: 'high',
86
+ description: 'This domain is on the blocked list',
87
+ location: url,
88
+ mitigation: 'Use the original URL instead of a shortener',
89
+ });
90
+ }
91
+ // Check for phishing indicators
92
+ if (this.config.enableThreatScanning) {
93
+ const phishingThreats = this.detectPhishing(url);
94
+ threats.push(...phishingThreats);
95
+ }
96
+ // Calculate safety score
97
+ const score = this.calculateSafetyScore(threats);
98
+ return {
99
+ safe: score >= 0.7 && !threats.some((t) => t.severity === 'critical'),
100
+ threats,
101
+ pii,
102
+ score,
103
+ scanDuration: Date.now() - startTime,
104
+ };
105
+ }
106
+ /**
107
+ * Scan content for PII before filling forms
108
+ */
109
+ scanContent(content, context = 'unknown') {
110
+ const startTime = Date.now();
111
+ const threats = [];
112
+ const pii = [];
113
+ if (!this.config.enablePIIDetection) {
114
+ return { safe: true, threats, pii, score: 1, scanDuration: Date.now() - startTime };
115
+ }
116
+ // Detect PII in content
117
+ for (const [type, pattern] of Object.entries(PII_PATTERNS)) {
118
+ const matches = content.matchAll(new RegExp(pattern.source, pattern.flags));
119
+ for (const match of matches) {
120
+ const value = match[0];
121
+ pii.push({
122
+ type,
123
+ value,
124
+ masked: this.maskPII(value, type),
125
+ location: context,
126
+ confidence: this.calculatePIIConfidence(value, type),
127
+ });
128
+ }
129
+ }
130
+ // Add threat if sensitive PII found
131
+ const sensitivePII = pii.filter((p) => ['ssn', 'credit-card', 'api-key', 'password'].includes(p.type));
132
+ if (sensitivePII.length > 0) {
133
+ threats.push({
134
+ type: 'data-exfiltration',
135
+ severity: 'high',
136
+ description: `Sensitive data detected: ${sensitivePII.map((p) => p.type).join(', ')}`,
137
+ location: context,
138
+ mitigation: 'Consider masking or removing sensitive data before processing',
139
+ });
140
+ }
141
+ const score = this.calculateSafetyScore(threats);
142
+ return {
143
+ safe: score >= 0.7,
144
+ threats,
145
+ pii,
146
+ score,
147
+ scanDuration: Date.now() - startTime,
148
+ };
149
+ }
150
+ /**
151
+ * Validate input before filling a form field
152
+ */
153
+ validateInput(value, fieldType) {
154
+ const threats = [];
155
+ const pii = [];
156
+ // Check for injection patterns
157
+ if (this.containsInjection(value)) {
158
+ threats.push({
159
+ type: 'injection',
160
+ severity: 'critical',
161
+ description: 'Potential injection attack detected in input',
162
+ location: fieldType,
163
+ mitigation: 'Sanitize input before submission',
164
+ });
165
+ }
166
+ // Check for XSS
167
+ if (this.containsXSS(value)) {
168
+ threats.push({
169
+ type: 'xss',
170
+ severity: 'critical',
171
+ description: 'Potential XSS attack detected in input',
172
+ location: fieldType,
173
+ mitigation: 'Escape HTML entities before submission',
174
+ });
175
+ }
176
+ // Detect PII in input
177
+ const contentScan = this.scanContent(value, fieldType);
178
+ pii.push(...contentScan.pii);
179
+ const score = this.calculateSafetyScore(threats);
180
+ return {
181
+ safe: score >= 0.7,
182
+ threats,
183
+ pii,
184
+ score,
185
+ scanDuration: 0,
186
+ };
187
+ }
188
+ /**
189
+ * Sanitize input by removing detected threats
190
+ */
191
+ sanitizeInput(value) {
192
+ let sanitized = value;
193
+ // Escape HTML entities
194
+ sanitized = sanitized
195
+ .replace(/&/g, '&amp;')
196
+ .replace(/</g, '&lt;')
197
+ .replace(/>/g, '&gt;')
198
+ .replace(/"/g, '&quot;')
199
+ .replace(/'/g, '&#x27;');
200
+ // Remove script tags
201
+ sanitized = sanitized.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '');
202
+ // Remove event handlers
203
+ sanitized = sanitized.replace(/\s*on\w+\s*=\s*["'][^"']*["']/gi, '');
204
+ return sanitized;
205
+ }
206
+ /**
207
+ * Mask PII for safe logging/display
208
+ */
209
+ maskPII(value, type) {
210
+ if (!this.config.piiMaskingEnabled)
211
+ return value;
212
+ switch (type) {
213
+ case 'email': {
214
+ const [local, domain] = value.split('@');
215
+ return `${local[0]}${'*'.repeat(Math.min(local.length - 1, 5))}@${domain}`;
216
+ }
217
+ case 'phone':
218
+ return value.replace(/\d(?=\d{4})/g, '*');
219
+ case 'ssn':
220
+ return '***-**-' + value.slice(-4);
221
+ case 'credit-card':
222
+ return '**** **** **** ' + value.replace(/\D/g, '').slice(-4);
223
+ case 'api-key':
224
+ return value.slice(0, 8) + '*'.repeat(Math.min(value.length - 8, 20));
225
+ case 'password':
226
+ return '********';
227
+ default:
228
+ return '*'.repeat(value.length);
229
+ }
230
+ }
231
+ // Private helpers
232
+ validateUrl(url) {
233
+ const threats = [];
234
+ try {
235
+ const parsed = new URL(url);
236
+ // Check HTTPS requirement
237
+ if (this.config.requireHttps && parsed.protocol !== 'https:') {
238
+ threats.push({
239
+ type: 'insecure-protocol',
240
+ severity: 'medium',
241
+ description: 'URL uses insecure HTTP protocol',
242
+ location: url,
243
+ mitigation: 'Use HTTPS for secure communication',
244
+ });
245
+ }
246
+ // Check for suspicious TLDs
247
+ if (SUSPICIOUS_TLDs.some((tld) => parsed.hostname.endsWith(tld))) {
248
+ threats.push({
249
+ type: 'phishing',
250
+ severity: 'medium',
251
+ description: 'URL uses a suspicious top-level domain',
252
+ location: parsed.hostname,
253
+ mitigation: 'Verify the legitimacy of this domain',
254
+ });
255
+ }
256
+ // Check for IP address in URL (often suspicious)
257
+ if (/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(parsed.hostname)) {
258
+ threats.push({
259
+ type: 'suspicious-redirect',
260
+ severity: 'medium',
261
+ description: 'URL points to an IP address instead of a domain',
262
+ location: parsed.hostname,
263
+ mitigation: 'Legitimate sites typically use domain names',
264
+ });
265
+ }
266
+ }
267
+ catch {
268
+ threats.push({
269
+ type: 'malware',
270
+ severity: 'high',
271
+ description: 'Invalid URL format',
272
+ location: url,
273
+ });
274
+ }
275
+ return threats;
276
+ }
277
+ isBlockedDomain(url) {
278
+ try {
279
+ const parsed = new URL(url);
280
+ const hostname = parsed.hostname.toLowerCase();
281
+ // Check allowed domains first
282
+ if (this.config.allowedDomains.length > 0 &&
283
+ this.config.allowedDomains.some((d) => hostname.includes(d.toLowerCase()))) {
284
+ return false;
285
+ }
286
+ // Check blocked domains
287
+ return this.config.blockedDomains.some((d) => hostname.includes(d.toLowerCase()));
288
+ }
289
+ catch {
290
+ return false;
291
+ }
292
+ }
293
+ detectPhishing(url) {
294
+ const threats = [];
295
+ const urlLower = url.toLowerCase();
296
+ // Check for phishing indicators in URL
297
+ for (const indicator of PHISHING_INDICATORS) {
298
+ if (urlLower.includes(indicator)) {
299
+ threats.push({
300
+ type: 'phishing',
301
+ severity: 'high',
302
+ description: `URL contains phishing indicator: ${indicator}`,
303
+ location: url,
304
+ mitigation: 'Verify this is a legitimate request from the service',
305
+ });
306
+ break;
307
+ }
308
+ }
309
+ // Check for lookalike domains (typosquatting)
310
+ const commonDomains = ['google', 'facebook', 'amazon', 'microsoft', 'apple', 'paypal', 'bank'];
311
+ for (const domain of commonDomains) {
312
+ const pattern = new RegExp(`${domain.split('').join('[^a-z]?')}`, 'i');
313
+ if (pattern.test(urlLower) && !urlLower.includes(`.${domain}.`)) {
314
+ const parsed = new URL(url);
315
+ if (!parsed.hostname.includes(domain)) {
316
+ threats.push({
317
+ type: 'phishing',
318
+ severity: 'high',
319
+ description: `URL may be impersonating ${domain}`,
320
+ location: url,
321
+ mitigation: 'Verify you are on the official domain',
322
+ });
323
+ }
324
+ }
325
+ }
326
+ return threats;
327
+ }
328
+ containsInjection(value) {
329
+ const injectionPatterns = [
330
+ /['";]/,
331
+ /--/,
332
+ /\/\*/,
333
+ /\bOR\b.*\b=\b/i,
334
+ /\bAND\b.*\b=\b/i,
335
+ /\bUNION\b.*\bSELECT\b/i,
336
+ /\bDROP\b.*\bTABLE\b/i,
337
+ /\bINSERT\b.*\bINTO\b/i,
338
+ ];
339
+ return injectionPatterns.some((pattern) => pattern.test(value));
340
+ }
341
+ containsXSS(value) {
342
+ const xssPatterns = [
343
+ /<script[^>]*>/i,
344
+ /javascript:/i,
345
+ /\bon\w+\s*=/i,
346
+ /<img[^>]+onerror/i,
347
+ /<svg[^>]+onload/i,
348
+ /data:text\/html/i,
349
+ ];
350
+ return xssPatterns.some((pattern) => pattern.test(value));
351
+ }
352
+ calculateSafetyScore(threats) {
353
+ if (threats.length === 0)
354
+ return 1;
355
+ const severityWeights = { low: 0.1, medium: 0.25, high: 0.4, critical: 0.6 };
356
+ let penalty = 0;
357
+ for (const threat of threats) {
358
+ penalty += severityWeights[threat.severity];
359
+ }
360
+ return Math.max(0, 1 - penalty);
361
+ }
362
+ calculatePIIConfidence(value, type) {
363
+ // Basic confidence calculation based on pattern match quality
364
+ switch (type) {
365
+ case 'email':
366
+ return value.includes('.') && value.includes('@') ? 0.95 : 0.7;
367
+ case 'ssn':
368
+ return /^\d{3}-\d{2}-\d{4}$/.test(value) ? 0.95 : 0.8;
369
+ case 'credit-card':
370
+ return value.replace(/\D/g, '').length === 16 ? 0.9 : 0.7;
371
+ case 'api-key':
372
+ return value.length > 30 ? 0.85 : 0.6;
373
+ default:
374
+ return 0.7;
375
+ }
376
+ }
377
+ }
378
+ // ============================================================================
379
+ // Factory Functions
380
+ // ============================================================================
381
+ let defaultScanner = null;
382
+ export function getSecurityScanner(config) {
383
+ if (!defaultScanner || config) {
384
+ defaultScanner = new BrowserSecurityScanner(config);
385
+ }
386
+ return defaultScanner;
387
+ }
388
+ /**
389
+ * Quick check if a URL is safe to navigate
390
+ */
391
+ export async function isUrlSafe(url) {
392
+ const scanner = getSecurityScanner();
393
+ const result = await scanner.scanUrl(url);
394
+ return result.safe;
395
+ }
396
+ /**
397
+ * Quick check if content contains PII
398
+ */
399
+ export function containsPII(content) {
400
+ const scanner = getSecurityScanner();
401
+ const result = scanner.scanContent(content);
402
+ return result.pii.length > 0;
403
+ }
404
+ //# sourceMappingURL=security-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-integration.js","sourceRoot":"","sources":["../../src/infrastructure/security-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @sparkleideas/browser - Workflow Templates
3
+ * Pre-built workflow templates for common browser automation tasks
4
+ */
5
+ export interface WorkflowTemplate {
6
+ id: string;
7
+ name: string;
8
+ description: string;
9
+ category: WorkflowCategory;
10
+ steps: WorkflowStep[];
11
+ variables: WorkflowVariable[];
12
+ tags: string[];
13
+ estimatedDuration: number;
14
+ successRate?: number;
15
+ }
16
+ export type WorkflowCategory = 'authentication' | 'data-extraction' | 'form-submission' | 'navigation' | 'testing' | 'monitoring';
17
+ export interface WorkflowStep {
18
+ id: string;
19
+ action: BrowserAction;
20
+ target?: string;
21
+ value?: string;
22
+ waitAfter?: number;
23
+ optional?: boolean;
24
+ onError?: 'continue' | 'abort' | 'retry';
25
+ maxRetries?: number;
26
+ condition?: string;
27
+ }
28
+ export type BrowserAction = 'open' | 'click' | 'fill' | 'type' | 'press' | 'select' | 'check' | 'uncheck' | 'hover' | 'scroll' | 'wait' | 'screenshot' | 'snapshot' | 'get' | 'eval' | 'assert';
29
+ export interface WorkflowVariable {
30
+ name: string;
31
+ type: 'string' | 'number' | 'boolean' | 'selector';
32
+ required: boolean;
33
+ default?: string | number | boolean;
34
+ description: string;
35
+ sensitive?: boolean;
36
+ }
37
+ export interface WorkflowExecution {
38
+ templateId: string;
39
+ variables: Record<string, unknown>;
40
+ status: 'pending' | 'running' | 'completed' | 'failed';
41
+ currentStep: number;
42
+ results: WorkflowStepResult[];
43
+ startedAt: string;
44
+ completedAt?: string;
45
+ error?: string;
46
+ }
47
+ export interface WorkflowStepResult {
48
+ stepId: string;
49
+ success: boolean;
50
+ duration: number;
51
+ data?: unknown;
52
+ error?: string;
53
+ retries?: number;
54
+ }
55
+ export declare const WORKFLOW_TEMPLATES: WorkflowTemplate[];
56
+ export declare class WorkflowManager {
57
+ private templates;
58
+ private executions;
59
+ constructor();
60
+ /**
61
+ * Get all available templates
62
+ */
63
+ listTemplates(category?: WorkflowCategory): WorkflowTemplate[];
64
+ /**
65
+ * Get a specific template
66
+ */
67
+ getTemplate(id: string): WorkflowTemplate | undefined;
68
+ /**
69
+ * Register a custom template
70
+ */
71
+ registerTemplate(template: WorkflowTemplate): void;
72
+ /**
73
+ * Search templates by tags
74
+ */
75
+ searchTemplates(query: string): WorkflowTemplate[];
76
+ /**
77
+ * Validate variables for a template
78
+ */
79
+ validateVariables(templateId: string, variables: Record<string, unknown>): {
80
+ valid: boolean;
81
+ errors: string[];
82
+ };
83
+ /**
84
+ * Interpolate variables in step values
85
+ */
86
+ interpolateStep(step: WorkflowStep, variables: Record<string, unknown>): WorkflowStep;
87
+ /**
88
+ * Get execution status
89
+ */
90
+ getExecution(executionId: string): WorkflowExecution | undefined;
91
+ }
92
+ export declare function getWorkflowManager(): WorkflowManager;
93
+ export declare function listWorkflows(category?: WorkflowCategory): WorkflowTemplate[];
94
+ export declare function getWorkflow(id: string): WorkflowTemplate | undefined;
95
+ //# sourceMappingURL=workflow-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-templates.d.ts","sourceRoot":"","sources":["../../src/infrastructure/workflow-templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GACxB,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,YAAY,GACZ,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,QAAQ,GACR,OAAO,GACP,SAAS,GACT,OAAO,GACP,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,UAAU,GACV,KAAK,GACL,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IACnD,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAoPhD,CAAC;AAMF,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,UAAU,CAA6C;;IAS/D;;OAEG;IACH,aAAa,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE;IAQ9D;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIrD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIlD;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAQlD;;OAEG;IACH,iBAAiB,CACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAmCvC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;IAgBrF;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CAGjE;AAQD,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD;AAED,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAE7E;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEpE"}