driftdetect-detectors 0.7.1 → 0.8.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 (75) hide show
  1. package/dist/api/cpp/boost-beast-detector.d.ts +31 -0
  2. package/dist/api/cpp/boost-beast-detector.d.ts.map +1 -0
  3. package/dist/api/cpp/boost-beast-detector.js +219 -0
  4. package/dist/api/cpp/boost-beast-detector.js.map +1 -0
  5. package/dist/api/cpp/crow-detector.d.ts +40 -0
  6. package/dist/api/cpp/crow-detector.d.ts.map +1 -0
  7. package/dist/api/cpp/crow-detector.js +181 -0
  8. package/dist/api/cpp/crow-detector.js.map +1 -0
  9. package/dist/api/cpp/index.d.ts +11 -0
  10. package/dist/api/cpp/index.d.ts.map +1 -0
  11. package/dist/api/cpp/index.js +11 -0
  12. package/dist/api/cpp/index.js.map +1 -0
  13. package/dist/api/cpp/qt-network-detector.d.ts +39 -0
  14. package/dist/api/cpp/qt-network-detector.d.ts.map +1 -0
  15. package/dist/api/cpp/qt-network-detector.js +175 -0
  16. package/dist/api/cpp/qt-network-detector.js.map +1 -0
  17. package/dist/api/index.d.ts +2 -0
  18. package/dist/api/index.d.ts.map +1 -1
  19. package/dist/api/index.js +8 -0
  20. package/dist/api/index.js.map +1 -1
  21. package/dist/api/rust/actix-detector.d.ts +46 -0
  22. package/dist/api/rust/actix-detector.d.ts.map +1 -0
  23. package/dist/api/rust/actix-detector.js +241 -0
  24. package/dist/api/rust/actix-detector.js.map +1 -0
  25. package/dist/api/rust/axum-detector.d.ts +46 -0
  26. package/dist/api/rust/axum-detector.d.ts.map +1 -0
  27. package/dist/api/rust/axum-detector.js +303 -0
  28. package/dist/api/rust/axum-detector.js.map +1 -0
  29. package/dist/api/rust/index.d.ts +14 -0
  30. package/dist/api/rust/index.d.ts.map +1 -0
  31. package/dist/api/rust/index.js +12 -0
  32. package/dist/api/rust/index.js.map +1 -0
  33. package/dist/api/rust/rocket-detector.d.ts +63 -0
  34. package/dist/api/rust/rocket-detector.d.ts.map +1 -0
  35. package/dist/api/rust/rocket-detector.js +218 -0
  36. package/dist/api/rust/rocket-detector.js.map +1 -0
  37. package/dist/api/rust/warp-detector.d.ts +60 -0
  38. package/dist/api/rust/warp-detector.d.ts.map +1 -0
  39. package/dist/api/rust/warp-detector.js +282 -0
  40. package/dist/api/rust/warp-detector.js.map +1 -0
  41. package/dist/auth/cpp/index.d.ts +9 -0
  42. package/dist/auth/cpp/index.d.ts.map +1 -0
  43. package/dist/auth/cpp/index.js +9 -0
  44. package/dist/auth/cpp/index.js.map +1 -0
  45. package/dist/auth/cpp/middleware-detector.d.ts +51 -0
  46. package/dist/auth/cpp/middleware-detector.d.ts.map +1 -0
  47. package/dist/auth/cpp/middleware-detector.js +419 -0
  48. package/dist/auth/cpp/middleware-detector.js.map +1 -0
  49. package/dist/auth/index.d.ts +1 -0
  50. package/dist/auth/index.d.ts.map +1 -1
  51. package/dist/auth/index.js +4 -0
  52. package/dist/auth/index.js.map +1 -1
  53. package/dist/auth/rust/middleware-detector.d.ts +68 -0
  54. package/dist/auth/rust/middleware-detector.d.ts.map +1 -0
  55. package/dist/auth/rust/middleware-detector.js +505 -0
  56. package/dist/auth/rust/middleware-detector.js.map +1 -0
  57. package/dist/errors/cpp/error-handling-detector.d.ts +74 -0
  58. package/dist/errors/cpp/error-handling-detector.d.ts.map +1 -0
  59. package/dist/errors/cpp/error-handling-detector.js +598 -0
  60. package/dist/errors/cpp/error-handling-detector.js.map +1 -0
  61. package/dist/errors/cpp/index.d.ts +9 -0
  62. package/dist/errors/cpp/index.d.ts.map +1 -0
  63. package/dist/errors/cpp/index.js +9 -0
  64. package/dist/errors/cpp/index.js.map +1 -0
  65. package/dist/errors/index.d.ts +1 -0
  66. package/dist/errors/index.d.ts.map +1 -1
  67. package/dist/errors/index.js +4 -0
  68. package/dist/errors/index.js.map +1 -1
  69. package/dist/errors/rust/error-handling-detector.d.ts +77 -0
  70. package/dist/errors/rust/error-handling-detector.d.ts.map +1 -0
  71. package/dist/errors/rust/error-handling-detector.js +363 -0
  72. package/dist/errors/rust/error-handling-detector.js.map +1 -0
  73. package/dist/index.d.ts +22 -22
  74. package/package.json +13 -13
  75. package/LICENSE +0 -21
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Boost.Beast Framework Detector
3
+ *
4
+ * Detects Boost.Beast HTTP/WebSocket patterns in C++ code:
5
+ * - HTTP server/client patterns
6
+ * - WebSocket connections
7
+ * - Async operations with Boost.Asio
8
+ *
9
+ * @license Apache-2.0
10
+ */
11
+ import type { Violation, QuickFix, Language } from 'driftdetect-core';
12
+ import { RegexDetector, type DetectionContext, type DetectionResult } from '../../base/index.js';
13
+ export declare class BoostBeastDetector extends RegexDetector {
14
+ readonly id = "api/cpp/boost-beast";
15
+ readonly category: "api";
16
+ readonly subcategory = "http";
17
+ readonly name = "Boost.Beast Detector";
18
+ readonly description = "Detects Boost.Beast HTTP/WebSocket patterns in C++ code";
19
+ readonly supportedLanguages: Language[];
20
+ generateQuickFix(_violation: Violation): QuickFix | null;
21
+ detect(context: DetectionContext): Promise<DetectionResult>;
22
+ private isCppFile;
23
+ private usesBoostBeast;
24
+ private detectHttpPatterns;
25
+ private detectWebSocketPatterns;
26
+ private detectAsyncPatterns;
27
+ private detectSslPatterns;
28
+ private calculateConfidence;
29
+ }
30
+ export declare function createBoostBeastDetector(): BoostBeastDetector;
31
+ //# sourceMappingURL=boost-beast-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boost-beast-detector.d.ts","sourceRoot":"","sources":["../../../src/api/cpp/boost-beast-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAgB,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMjG,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,QAAQ,CAAC,EAAE,yBAAyB;IACpC,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAU;IACnC,QAAQ,CAAC,WAAW,UAAU;IAC9B,QAAQ,CAAC,IAAI,0BAA0B;IACvC,QAAQ,CAAC,WAAW,6DAA6D;IACjF,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,CAAW;IAElD,gBAAgB,CAAC,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI;IAIlD,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA2BjE,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,kBAAkB;IAwD1B,OAAO,CAAC,uBAAuB;IA+C/B,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,mBAAmB;CAI5B;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * Boost.Beast Framework Detector
3
+ *
4
+ * Detects Boost.Beast HTTP/WebSocket patterns in C++ code:
5
+ * - HTTP server/client patterns
6
+ * - WebSocket connections
7
+ * - Async operations with Boost.Asio
8
+ *
9
+ * @license Apache-2.0
10
+ */
11
+ import { RegexDetector } from '../../base/index.js';
12
+ // ============================================================================
13
+ // Boost.Beast Detector Class
14
+ // ============================================================================
15
+ export class BoostBeastDetector extends RegexDetector {
16
+ id = 'api/cpp/boost-beast';
17
+ category = 'api';
18
+ subcategory = 'http';
19
+ name = 'Boost.Beast Detector';
20
+ description = 'Detects Boost.Beast HTTP/WebSocket patterns in C++ code';
21
+ supportedLanguages = ['cpp'];
22
+ generateQuickFix(_violation) {
23
+ return null;
24
+ }
25
+ async detect(context) {
26
+ const patterns = [];
27
+ const violations = [];
28
+ if (!this.isCppFile(context.file)) {
29
+ return this.createResult(patterns, violations, 1.0);
30
+ }
31
+ if (!this.usesBoostBeast(context.content)) {
32
+ return this.createResult(patterns, violations, 1.0);
33
+ }
34
+ // Detect HTTP patterns
35
+ this.detectHttpPatterns(context.content, context.file, patterns);
36
+ // Detect WebSocket patterns
37
+ this.detectWebSocketPatterns(context.content, context.file, patterns);
38
+ // Detect async patterns
39
+ this.detectAsyncPatterns(context.content, context.file, patterns);
40
+ // Detect SSL/TLS patterns
41
+ this.detectSslPatterns(context.content, context.file, patterns);
42
+ return this.createResult(patterns, violations, this.calculateConfidence(patterns));
43
+ }
44
+ isCppFile(file) {
45
+ return /\.(cpp|cc|cxx|hpp|hh|hxx|h)$/.test(file);
46
+ }
47
+ usesBoostBeast(content) {
48
+ return content.includes('boost::beast') ||
49
+ content.includes('#include <boost/beast') ||
50
+ content.includes('namespace beast = boost::beast');
51
+ }
52
+ detectHttpPatterns(content, file, patterns) {
53
+ // HTTP request types
54
+ const requestPattern = /beast::http::request\s*<\s*([^>]+)\s*>/g;
55
+ for (const match of this.matchLines(content, requestPattern)) {
56
+ patterns.push({
57
+ patternId: `${this.id}/http-request`,
58
+ location: { file, line: match.line, column: match.column },
59
+ confidence: 0.95,
60
+ isOutlier: false,
61
+ });
62
+ }
63
+ // HTTP response types
64
+ const responsePattern = /beast::http::response\s*<\s*([^>]+)\s*>/g;
65
+ for (const match of this.matchLines(content, responsePattern)) {
66
+ patterns.push({
67
+ patternId: `${this.id}/http-response`,
68
+ location: { file, line: match.line, column: match.column },
69
+ confidence: 0.95,
70
+ isOutlier: false,
71
+ });
72
+ }
73
+ // HTTP verbs
74
+ const verbPattern = /beast::http::verb::(\w+)/g;
75
+ for (const match of this.matchLines(content, verbPattern)) {
76
+ patterns.push({
77
+ patternId: `${this.id}/http-verb/${match.captures[1]?.toLowerCase() ?? 'unknown'}`,
78
+ location: { file, line: match.line, column: match.column },
79
+ confidence: 0.9,
80
+ isOutlier: false,
81
+ });
82
+ }
83
+ // HTTP read/write operations
84
+ const readPattern = /beast::http::(?:async_)?read\s*\(/g;
85
+ for (const match of this.matchLines(content, readPattern)) {
86
+ patterns.push({
87
+ patternId: `${this.id}/http-read`,
88
+ location: { file, line: match.line, column: match.column },
89
+ confidence: 0.9,
90
+ isOutlier: false,
91
+ });
92
+ }
93
+ const writePattern = /beast::http::(?:async_)?write\s*\(/g;
94
+ for (const match of this.matchLines(content, writePattern)) {
95
+ patterns.push({
96
+ patternId: `${this.id}/http-write`,
97
+ location: { file, line: match.line, column: match.column },
98
+ confidence: 0.9,
99
+ isOutlier: false,
100
+ });
101
+ }
102
+ }
103
+ detectWebSocketPatterns(content, file, patterns) {
104
+ // WebSocket stream
105
+ const wsStreamPattern = /beast::websocket::stream\s*<\s*([^>]+)\s*>/g;
106
+ for (const match of this.matchLines(content, wsStreamPattern)) {
107
+ patterns.push({
108
+ patternId: `${this.id}/websocket-stream`,
109
+ location: { file, line: match.line, column: match.column },
110
+ confidence: 0.95,
111
+ isOutlier: false,
112
+ });
113
+ }
114
+ // WebSocket accept/handshake
115
+ const acceptPattern = /\.(?:async_)?accept\s*\(/g;
116
+ for (const match of this.matchLines(content, acceptPattern)) {
117
+ if (content.includes('websocket')) {
118
+ patterns.push({
119
+ patternId: `${this.id}/websocket-accept`,
120
+ location: { file, line: match.line, column: match.column },
121
+ confidence: 0.85,
122
+ isOutlier: false,
123
+ });
124
+ }
125
+ }
126
+ // WebSocket read/write
127
+ const wsReadPattern = /\.(?:async_)?read\s*\(\s*buffer/g;
128
+ for (const match of this.matchLines(content, wsReadPattern)) {
129
+ patterns.push({
130
+ patternId: `${this.id}/websocket-read`,
131
+ location: { file, line: match.line, column: match.column },
132
+ confidence: 0.85,
133
+ isOutlier: false,
134
+ });
135
+ }
136
+ const wsWritePattern = /\.(?:async_)?write\s*\(\s*(?:net::)?buffer/g;
137
+ for (const match of this.matchLines(content, wsWritePattern)) {
138
+ patterns.push({
139
+ patternId: `${this.id}/websocket-write`,
140
+ location: { file, line: match.line, column: match.column },
141
+ confidence: 0.85,
142
+ isOutlier: false,
143
+ });
144
+ }
145
+ }
146
+ detectAsyncPatterns(content, file, patterns) {
147
+ // io_context
148
+ const ioContextPattern = /(?:net|asio)::io_context\s+\w+/g;
149
+ for (const match of this.matchLines(content, ioContextPattern)) {
150
+ patterns.push({
151
+ patternId: `${this.id}/io-context`,
152
+ location: { file, line: match.line, column: match.column },
153
+ confidence: 0.9,
154
+ isOutlier: false,
155
+ });
156
+ }
157
+ // async_connect
158
+ const asyncConnectPattern = /(?:net|asio)::async_connect\s*\(/g;
159
+ for (const match of this.matchLines(content, asyncConnectPattern)) {
160
+ patterns.push({
161
+ patternId: `${this.id}/async-connect`,
162
+ location: { file, line: match.line, column: match.column },
163
+ confidence: 0.9,
164
+ isOutlier: false,
165
+ });
166
+ }
167
+ // Coroutine patterns (C++20)
168
+ const coroPattern = /(?:net|asio)::(?:awaitable|use_awaitable|co_spawn)/g;
169
+ for (const match of this.matchLines(content, coroPattern)) {
170
+ patterns.push({
171
+ patternId: `${this.id}/coroutine`,
172
+ location: { file, line: match.line, column: match.column },
173
+ confidence: 0.9,
174
+ isOutlier: false,
175
+ });
176
+ }
177
+ }
178
+ detectSslPatterns(content, file, patterns) {
179
+ // SSL context
180
+ const sslContextPattern = /(?:ssl|asio::ssl)::context\s+\w+/g;
181
+ for (const match of this.matchLines(content, sslContextPattern)) {
182
+ patterns.push({
183
+ patternId: `${this.id}/ssl-context`,
184
+ location: { file, line: match.line, column: match.column },
185
+ confidence: 0.95,
186
+ isOutlier: false,
187
+ });
188
+ }
189
+ // SSL stream
190
+ const sslStreamPattern = /(?:ssl|asio::ssl)::stream\s*<\s*([^>]+)\s*>/g;
191
+ for (const match of this.matchLines(content, sslStreamPattern)) {
192
+ patterns.push({
193
+ patternId: `${this.id}/ssl-stream`,
194
+ location: { file, line: match.line, column: match.column },
195
+ confidence: 0.95,
196
+ isOutlier: false,
197
+ });
198
+ }
199
+ // Handshake
200
+ const handshakePattern = /\.(?:async_)?handshake\s*\(/g;
201
+ for (const match of this.matchLines(content, handshakePattern)) {
202
+ patterns.push({
203
+ patternId: `${this.id}/ssl-handshake`,
204
+ location: { file, line: match.line, column: match.column },
205
+ confidence: 0.85,
206
+ isOutlier: false,
207
+ });
208
+ }
209
+ }
210
+ calculateConfidence(patterns) {
211
+ if (patterns.length === 0)
212
+ return 1.0;
213
+ return patterns.reduce((sum, p) => sum + p.confidence, 0) / patterns.length;
214
+ }
215
+ }
216
+ export function createBoostBeastDetector() {
217
+ return new BoostBeastDetector();
218
+ }
219
+ //# sourceMappingURL=boost-beast-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boost-beast-detector.js","sourceRoot":"","sources":["../../../src/api/cpp/boost-beast-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Crow Framework Detector
3
+ *
4
+ * Detects Crow HTTP framework patterns in C++ code:
5
+ * - Route definitions (CROW_ROUTE)
6
+ * - Blueprint usage
7
+ * - Middleware
8
+ * - WebSocket handlers
9
+ *
10
+ * @license Apache-2.0
11
+ */
12
+ import type { Violation, QuickFix, Language } from 'driftdetect-core';
13
+ import { RegexDetector, type DetectionContext, type DetectionResult } from '../../base/index.js';
14
+ export interface CrowRouteInfo {
15
+ method: string;
16
+ path: string;
17
+ line: number;
18
+ column: number;
19
+ hasParams: boolean;
20
+ }
21
+ export declare class CrowDetector extends RegexDetector {
22
+ readonly id = "api/cpp/crow";
23
+ readonly category: "api";
24
+ readonly subcategory = "routes";
25
+ readonly name = "Crow Framework Detector";
26
+ readonly description = "Detects Crow HTTP framework route patterns in C++ code";
27
+ readonly supportedLanguages: Language[];
28
+ generateQuickFix(_violation: Violation): QuickFix | null;
29
+ detect(context: DetectionContext): Promise<DetectionResult>;
30
+ private isCppFile;
31
+ private usesCrow;
32
+ private detectCrowRoutes;
33
+ private detectAppUsage;
34
+ private detectMiddleware;
35
+ private detectWebSocket;
36
+ private detectBlueprints;
37
+ private calculateConfidence;
38
+ }
39
+ export declare function createCrowDetector(): CrowDetector;
40
+ //# sourceMappingURL=crow-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crow-detector.d.ts","sourceRoot":"","sources":["../../../src/api/cpp/crow-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAgB,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMjG,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD,qBAAa,YAAa,SAAQ,aAAa;IAC7C,QAAQ,CAAC,EAAE,kBAAkB;IAC7B,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAU;IACnC,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,IAAI,6BAA6B;IAC1C,QAAQ,CAAC,WAAW,4DAA4D;IAChF,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,CAAW;IAElD,gBAAgB,CAAC,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI;IAIlD,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA8BjE,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,mBAAmB;CAI5B;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Crow Framework Detector
3
+ *
4
+ * Detects Crow HTTP framework patterns in C++ code:
5
+ * - Route definitions (CROW_ROUTE)
6
+ * - Blueprint usage
7
+ * - Middleware
8
+ * - WebSocket handlers
9
+ *
10
+ * @license Apache-2.0
11
+ */
12
+ import { RegexDetector } from '../../base/index.js';
13
+ // ============================================================================
14
+ // Crow Detector Class
15
+ // ============================================================================
16
+ export class CrowDetector extends RegexDetector {
17
+ id = 'api/cpp/crow';
18
+ category = 'api';
19
+ subcategory = 'routes';
20
+ name = 'Crow Framework Detector';
21
+ description = 'Detects Crow HTTP framework route patterns in C++ code';
22
+ supportedLanguages = ['cpp'];
23
+ generateQuickFix(_violation) {
24
+ return null;
25
+ }
26
+ async detect(context) {
27
+ const patterns = [];
28
+ const violations = [];
29
+ if (!this.isCppFile(context.file)) {
30
+ return this.createResult(patterns, violations, 1.0);
31
+ }
32
+ if (!this.usesCrow(context.content)) {
33
+ return this.createResult(patterns, violations, 1.0);
34
+ }
35
+ // Detect CROW_ROUTE macro
36
+ this.detectCrowRoutes(context.content, context.file, patterns);
37
+ // Detect crow::App usage
38
+ this.detectAppUsage(context.content, context.file, patterns);
39
+ // Detect middleware
40
+ this.detectMiddleware(context.content, context.file, patterns);
41
+ // Detect WebSocket
42
+ this.detectWebSocket(context.content, context.file, patterns);
43
+ // Detect blueprints
44
+ this.detectBlueprints(context.content, context.file, patterns);
45
+ return this.createResult(patterns, violations, this.calculateConfidence(patterns));
46
+ }
47
+ isCppFile(file) {
48
+ return /\.(cpp|cc|cxx|hpp|hh|hxx|h)$/.test(file);
49
+ }
50
+ usesCrow(content) {
51
+ return content.includes('crow::') ||
52
+ content.includes('#include "crow') ||
53
+ content.includes('#include <crow') ||
54
+ content.includes('CROW_ROUTE') ||
55
+ content.includes('CROW_BP_ROUTE');
56
+ }
57
+ detectCrowRoutes(content, file, patterns) {
58
+ // CROW_ROUTE(app, "/path")
59
+ const routePattern = /CROW_ROUTE\s*\(\s*\w+\s*,\s*"([^"]+)"\s*\)/g;
60
+ for (const match of this.matchLines(content, routePattern)) {
61
+ patterns.push({
62
+ patternId: `${this.id}/route`,
63
+ location: { file, line: match.line, column: match.column },
64
+ confidence: 0.95,
65
+ isOutlier: false,
66
+ });
67
+ }
68
+ // CROW_BP_ROUTE (blueprint routes)
69
+ const bpRoutePattern = /CROW_BP_ROUTE\s*\(\s*\w+\s*,\s*"([^"]+)"\s*\)/g;
70
+ for (const match of this.matchLines(content, bpRoutePattern)) {
71
+ patterns.push({
72
+ patternId: `${this.id}/blueprint-route`,
73
+ location: { file, line: match.line, column: match.column },
74
+ confidence: 0.95,
75
+ isOutlier: false,
76
+ });
77
+ }
78
+ // Method chaining: .methods(crow::HTTPMethod::GET)
79
+ const methodPattern = /\.methods\s*\(\s*crow::HTTPMethod::(\w+)/g;
80
+ for (const match of this.matchLines(content, methodPattern)) {
81
+ patterns.push({
82
+ patternId: `${this.id}/method/${match.captures[1]?.toLowerCase() ?? 'unknown'}`,
83
+ location: { file, line: match.line, column: match.column },
84
+ confidence: 0.9,
85
+ isOutlier: false,
86
+ });
87
+ }
88
+ }
89
+ detectAppUsage(content, file, patterns) {
90
+ // crow::SimpleApp or crow::App<>
91
+ const appPattern = /crow::(SimpleApp|App\s*<[^>]*>)\s+\w+/g;
92
+ for (const match of this.matchLines(content, appPattern)) {
93
+ patterns.push({
94
+ patternId: `${this.id}/app`,
95
+ location: { file, line: match.line, column: match.column },
96
+ confidence: 0.95,
97
+ isOutlier: false,
98
+ });
99
+ }
100
+ // app.port().multithreaded().run()
101
+ const runPattern = /\.port\s*\(\s*\d+\s*\)[^;]*\.run\s*\(\s*\)/g;
102
+ for (const match of this.matchLines(content, runPattern)) {
103
+ patterns.push({
104
+ patternId: `${this.id}/server-start`,
105
+ location: { file, line: match.line, column: match.column },
106
+ confidence: 0.95,
107
+ isOutlier: false,
108
+ });
109
+ }
110
+ }
111
+ detectMiddleware(content, file, patterns) {
112
+ // crow::App<crow::CORSHandler>
113
+ const middlewarePattern = /crow::App\s*<\s*([^>]+)\s*>/g;
114
+ for (const match of this.matchLines(content, middlewarePattern)) {
115
+ const middlewares = match.captures[1]?.split(',') ?? [];
116
+ for (const mw of middlewares) {
117
+ if (mw.trim()) {
118
+ patterns.push({
119
+ patternId: `${this.id}/middleware`,
120
+ location: { file, line: match.line, column: match.column },
121
+ confidence: 0.9,
122
+ isOutlier: false,
123
+ });
124
+ }
125
+ }
126
+ }
127
+ }
128
+ detectWebSocket(content, file, patterns) {
129
+ // CROW_WEBSOCKET_ROUTE
130
+ const wsPattern = /CROW_WEBSOCKET_ROUTE\s*\(\s*\w+\s*,\s*"([^"]+)"\s*\)/g;
131
+ for (const match of this.matchLines(content, wsPattern)) {
132
+ patterns.push({
133
+ patternId: `${this.id}/websocket`,
134
+ location: { file, line: match.line, column: match.column },
135
+ confidence: 0.95,
136
+ isOutlier: false,
137
+ });
138
+ }
139
+ // .onopen, .onmessage, .onclose handlers
140
+ const handlerPattern = /\.(onopen|onmessage|onclose|onerror)\s*\(\s*\[/g;
141
+ for (const match of this.matchLines(content, handlerPattern)) {
142
+ patterns.push({
143
+ patternId: `${this.id}/websocket-handler`,
144
+ location: { file, line: match.line, column: match.column },
145
+ confidence: 0.9,
146
+ isOutlier: false,
147
+ });
148
+ }
149
+ }
150
+ detectBlueprints(content, file, patterns) {
151
+ // crow::Blueprint
152
+ const bpPattern = /crow::Blueprint\s+\w+/g;
153
+ for (const match of this.matchLines(content, bpPattern)) {
154
+ patterns.push({
155
+ patternId: `${this.id}/blueprint`,
156
+ location: { file, line: match.line, column: match.column },
157
+ confidence: 0.95,
158
+ isOutlier: false,
159
+ });
160
+ }
161
+ // app.register_blueprint
162
+ const registerPattern = /\.register_blueprint\s*\(/g;
163
+ for (const match of this.matchLines(content, registerPattern)) {
164
+ patterns.push({
165
+ patternId: `${this.id}/blueprint-register`,
166
+ location: { file, line: match.line, column: match.column },
167
+ confidence: 0.9,
168
+ isOutlier: false,
169
+ });
170
+ }
171
+ }
172
+ calculateConfidence(patterns) {
173
+ if (patterns.length === 0)
174
+ return 1.0;
175
+ return patterns.reduce((sum, p) => sum + p.confidence, 0) / patterns.length;
176
+ }
177
+ }
178
+ export function createCrowDetector() {
179
+ return new CrowDetector();
180
+ }
181
+ //# sourceMappingURL=crow-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crow-detector.js","sourceRoot":"","sources":["../../../src/api/cpp/crow-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * C++ API Framework Detectors
3
+ *
4
+ * Exports all C++ web framework detectors.
5
+ *
6
+ * @license Apache-2.0
7
+ */
8
+ export { QtNetworkDetector, createQtNetworkDetector } from './qt-network-detector.js';
9
+ export { CrowDetector, createCrowDetector } from './crow-detector.js';
10
+ export { BoostBeastDetector, createBoostBeastDetector } from './boost-beast-detector.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/cpp/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * C++ API Framework Detectors
3
+ *
4
+ * Exports all C++ web framework detectors.
5
+ *
6
+ * @license Apache-2.0
7
+ */
8
+ export { QtNetworkDetector, createQtNetworkDetector } from './qt-network-detector.js';
9
+ export { CrowDetector, createCrowDetector } from './crow-detector.js';
10
+ export { BoostBeastDetector, createBoostBeastDetector } from './boost-beast-detector.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/cpp/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Qt Network Framework Detector
3
+ *
4
+ * Detects Qt Network HTTP patterns in C++ code:
5
+ * - QNetworkAccessManager requests
6
+ * - QNetworkReply handling
7
+ * - REST API patterns
8
+ * - WebSocket connections
9
+ *
10
+ * @license Apache-2.0
11
+ */
12
+ import type { Violation, QuickFix, Language } from 'driftdetect-core';
13
+ import { RegexDetector, type DetectionContext, type DetectionResult } from '../../base/index.js';
14
+ export interface QtNetworkRequest {
15
+ method: string;
16
+ line: number;
17
+ column: number;
18
+ hasCallback: boolean;
19
+ isAsync: boolean;
20
+ }
21
+ export declare class QtNetworkDetector extends RegexDetector {
22
+ readonly id = "api/cpp/qt-network";
23
+ readonly category: "api";
24
+ readonly subcategory = "http-client";
25
+ readonly name = "Qt Network Detector";
26
+ readonly description = "Detects Qt Network HTTP patterns in C++ code";
27
+ readonly supportedLanguages: Language[];
28
+ generateQuickFix(_violation: Violation): QuickFix | null;
29
+ detect(context: DetectionContext): Promise<DetectionResult>;
30
+ private isCppFile;
31
+ private usesQtNetwork;
32
+ private detectNetworkManager;
33
+ private detectHttpRequests;
34
+ private detectReplyHandling;
35
+ private detectWebSocket;
36
+ private calculateConfidence;
37
+ }
38
+ export declare function createQtNetworkDetector(): QtNetworkDetector;
39
+ //# sourceMappingURL=qt-network-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qt-network-detector.d.ts","sourceRoot":"","sources":["../../../src/api/cpp/qt-network-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAgB,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMjG,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,EAAE,wBAAwB;IACnC,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAU;IACnC,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,IAAI,yBAAyB;IACtC,QAAQ,CAAC,WAAW,kDAAkD;IACtE,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,EAAE,CAAW;IAElD,gBAAgB,CAAC,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI;IAIlD,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA6BjE,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,kBAAkB;IAyD1B,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,mBAAmB;CAI5B;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D"}