@j3r3mcdev/oast-server 1.1.1 → 1.1.2

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 (187) hide show
  1. package/.github/workflows/ci.yml +29 -29
  2. package/.github/workflows/publish.yml +31 -31
  3. package/README.md +192 -192
  4. package/dist/api/controllers/__tests__/tasks.controller.test.d.ts +1 -0
  5. package/dist/api/controllers/events.controller.d.ts +6 -0
  6. package/dist/api/controllers/health.controller.d.ts +4 -0
  7. package/dist/api/controllers/index.d.ts +0 -0
  8. package/dist/api/controllers/tasks.controller.d.ts +40 -0
  9. package/dist/api/dto/__tests__/create-task.dto.test.d.ts +1 -0
  10. package/dist/api/dto/__tests__/filter-tasks.dto.test.d.ts +1 -0
  11. package/dist/api/dto/create-task.dto.d.ts +9 -0
  12. package/dist/api/dto/filter-tasks.dto.d.ts +8 -0
  13. package/dist/api/services/__tests__/events.service.test.d.ts +1 -0
  14. package/dist/api/services/__tests__/tasks.service.test.d.ts +1 -0
  15. package/dist/api/services/events.service.d.ts +8 -0
  16. package/dist/api/services/tasks.service.d.ts +22 -0
  17. package/dist/api/sse/events.stream.d.ts +25 -0
  18. package/dist/config/constants.d.ts +0 -0
  19. package/dist/config/env.d.ts +0 -0
  20. package/dist/core/__tests__/core-router.test.d.ts +1 -0
  21. package/dist/core/__tests__/core-server.test.d.ts +1 -0
  22. package/dist/core/__tests__/event.normalizer.test.d.ts +1 -0
  23. package/dist/core/__tests__/event.router.test.d.ts +1 -0
  24. package/dist/core/__tests__/logger.test.d.ts +1 -0
  25. package/dist/core/__tests__/storage-manager.test.d.ts +1 -0
  26. package/dist/core/event.normalizer.d.ts +10 -0
  27. package/dist/core/event.router.d.ts +7 -0
  28. package/dist/core/http/__tests__/adapter-node.test.d.ts +1 -0
  29. package/dist/core/http/__tests__/body-parser-multipart.test.d.ts +1 -0
  30. package/dist/core/http/__tests__/body-parser-raw.test.d.ts +1 -0
  31. package/dist/core/http/__tests__/body-parser-text.test.d.ts +1 -0
  32. package/dist/core/http/__tests__/compile-path.test.d.ts +1 -0
  33. package/dist/core/http/__tests__/middleware-pipeline.test.d.ts +1 -0
  34. package/dist/core/http/__tests__/request.test.d.ts +1 -0
  35. package/dist/core/http/__tests__/response.test.d.ts +1 -0
  36. package/dist/core/http/__tests__/router-match.test.d.ts +1 -0
  37. package/dist/core/http/adapter-node.d.ts +8 -0
  38. package/dist/core/http/buildRequest.d.ts +2 -0
  39. package/dist/core/http/compile-path.d.ts +13 -0
  40. package/dist/core/http/errors.d.ts +9 -0
  41. package/dist/core/http/http-server.d.ts +7 -0
  42. package/dist/core/http/index.d.ts +0 -0
  43. package/dist/core/http/main.d.ts +0 -0
  44. package/dist/core/http/middleware.d.ts +12 -0
  45. package/dist/core/http/request.d.ts +35 -0
  46. package/dist/core/http/response.d.ts +17 -0
  47. package/dist/core/http/router.d.ts +28 -0
  48. package/dist/core/http/utils.d.ts +0 -0
  49. package/dist/core/id-generator.d.ts +3 -0
  50. package/dist/core/logger.d.ts +29 -0
  51. package/dist/core/router.d.ts +16 -0
  52. package/dist/core/server.d.ts +25 -0
  53. package/dist/core/storage.d.ts +24 -0
  54. package/dist/index.d.ts +1 -0
  55. package/dist/listeners/api/__tests__/api.controller.test.d.ts +1 -0
  56. package/dist/listeners/api/__tests__/api.extractor.test.d.ts +1 -0
  57. package/dist/listeners/api/__tests__/api.listener.test.d.ts +1 -0
  58. package/dist/listeners/api/__tests__/api.routes.test.d.ts +1 -0
  59. package/dist/listeners/api/__tests__/api.sse.test.d.ts +1 -0
  60. package/dist/listeners/api/api.controllers.d.ts +9 -0
  61. package/dist/listeners/api/api.extractor.d.ts +5 -0
  62. package/dist/listeners/api/api.listener.d.ts +17 -0
  63. package/dist/listeners/api/api.routes.d.ts +5 -0
  64. package/dist/listeners/api/api.sse.d.ts +10 -0
  65. package/dist/listeners/dns/__tests__/dns.test.d.ts +1 -0
  66. package/dist/listeners/dns/dns.extractor.d.ts +8 -0
  67. package/dist/listeners/dns/dns.listener.d.ts +15 -0
  68. package/dist/listeners/http/__tests__/http.extractor.test.d.ts +1 -0
  69. package/dist/listeners/http/__tests__/http.listener.test.d.ts +1 -0
  70. package/dist/listeners/http/http.extractor.d.ts +11 -0
  71. package/dist/listeners/http/http.listener.d.ts +17 -0
  72. package/dist/listeners/listener.interface.d.ts +4 -0
  73. package/dist/listeners/smtp/__tests__/smtp.extractor.test.d.ts +1 -0
  74. package/dist/listeners/smtp/__tests__/smtp.listener.test.d.ts +1 -0
  75. package/dist/listeners/smtp/smtp.extractor.d.ts +12 -0
  76. package/dist/listeners/smtp/smtp.listener.d.ts +13 -0
  77. package/dist/listeners/ssrf/__tests__/ssrf.extractor.test.d.ts +1 -0
  78. package/dist/listeners/ssrf/__tests__/ssrf.listener.test.d.ts +1 -0
  79. package/dist/listeners/ssrf/__tests__/ssrf.listener.test.js +4 -16
  80. package/dist/listeners/ssrf/ssrf.extractor.d.ts +10 -0
  81. package/dist/listeners/ssrf/ssrf.listener.d.ts +8 -0
  82. package/dist/listeners/tcp/tcp.extractor.d.ts +4 -0
  83. package/dist/listeners/tcp/tcp.listener.d.ts +18 -0
  84. package/dist/listeners/webhook/__tests__/webhook.extractor.test.d.ts +1 -0
  85. package/dist/listeners/webhook/__tests__/webhook.listener.test.d.ts +1 -0
  86. package/dist/listeners/webhook/webhook.extractor.d.ts +8 -0
  87. package/dist/listeners/webhook/webhook.listener.d.ts +8 -0
  88. package/dist/listeners/websocket/__tests__/websocket.extractor.test.d.ts +1 -0
  89. package/dist/listeners/websocket/__tests__/websocket.listener.test.d.ts +1 -0
  90. package/dist/listeners/websocket/websocket.extractor.d.ts +10 -0
  91. package/dist/listeners/websocket/websocket.listener.d.ts +8 -0
  92. package/dist/storage-adapters/adapters/__tests__/memory.storage.test.d.ts +1 -0
  93. package/dist/storage-adapters/adapters/memory.storage.d.ts +21 -0
  94. package/dist/storage-adapters/adapters/redis.storage.d.ts +0 -0
  95. package/dist/storage-adapters/adapters/sqlite.storage.d.ts +0 -0
  96. package/dist/storage-adapters/storage.interface.d.ts +18 -0
  97. package/dist/types/event.types.d.ts +118 -0
  98. package/dist/utils/token.d.ts +0 -0
  99. package/jest.config.js +14 -14
  100. package/package.json +45 -45
  101. package/sadmin list shadows +9 -9
  102. package/src/api/controllers/__tests__/tasks.controller.test.ts +74 -74
  103. package/src/api/controllers/events.controller.ts +10 -10
  104. package/src/api/controllers/health.controller.ts +7 -7
  105. package/src/api/controllers/tasks.controller.ts +41 -41
  106. package/src/api/dto/__tests__/create-task.dto.test.ts +41 -41
  107. package/src/api/dto/__tests__/filter-tasks.dto.test.ts +35 -35
  108. package/src/api/dto/create-task.dto.ts +33 -33
  109. package/src/api/dto/filter-tasks.dto.ts +33 -33
  110. package/src/api/services/__tests__/events.service.test.ts +41 -41
  111. package/src/api/services/__tests__/tasks.service.test.ts +41 -41
  112. package/src/api/services/events.service.ts +17 -17
  113. package/src/api/services/tasks.service.ts +79 -79
  114. package/src/api/sse/events.stream.ts +90 -90
  115. package/src/core/__tests__/core-router.test.ts +30 -30
  116. package/src/core/__tests__/core-server.test.ts +44 -44
  117. package/src/core/__tests__/event.normalizer.test.ts +56 -56
  118. package/src/core/__tests__/event.router.test.ts +89 -89
  119. package/src/core/__tests__/logger.test.ts +32 -32
  120. package/src/core/__tests__/storage-manager.test.ts +74 -74
  121. package/src/core/event.normalizer.ts +147 -147
  122. package/src/core/event.router.ts +13 -13
  123. package/src/core/http/__tests__/adapter-node.test.ts +52 -52
  124. package/src/core/http/__tests__/body-parser-multipart.test.ts +41 -41
  125. package/src/core/http/__tests__/body-parser-raw.test.ts +28 -28
  126. package/src/core/http/__tests__/body-parser-text.test.ts +28 -28
  127. package/src/core/http/__tests__/compile-path.test.ts +39 -39
  128. package/src/core/http/__tests__/middleware-pipeline.test.ts +51 -51
  129. package/src/core/http/__tests__/request.test.ts +34 -34
  130. package/src/core/http/__tests__/response.test.ts +35 -35
  131. package/src/core/http/__tests__/router-match.test.ts +171 -171
  132. package/src/core/http/adapter-node.ts +51 -51
  133. package/src/core/http/buildRequest.ts +18 -18
  134. package/src/core/http/compile-path.ts +32 -32
  135. package/src/core/http/errors.ts +37 -37
  136. package/src/core/http/http-server.ts +52 -52
  137. package/src/core/http/middleware.ts +160 -160
  138. package/src/core/http/request.ts +55 -55
  139. package/src/core/http/response.ts +93 -93
  140. package/src/core/http/router.ts +138 -138
  141. package/src/core/id-generator.ts +8 -8
  142. package/src/core/logger.ts +113 -113
  143. package/src/core/router.ts +44 -44
  144. package/src/core/server.ts +85 -85
  145. package/src/core/storage.ts +64 -64
  146. package/src/index.ts +89 -89
  147. package/src/listeners/api/__tests__/api.controller.test.ts +116 -116
  148. package/src/listeners/api/__tests__/api.extractor.test.ts +46 -46
  149. package/src/listeners/api/__tests__/api.listener.test.ts +82 -82
  150. package/src/listeners/api/__tests__/api.routes.test.ts +155 -155
  151. package/src/listeners/api/__tests__/api.sse.test.ts +105 -105
  152. package/src/listeners/api/api.controllers.ts +67 -67
  153. package/src/listeners/api/api.extractor.ts +43 -43
  154. package/src/listeners/api/api.listener.ts +50 -50
  155. package/src/listeners/api/api.routes.ts +76 -76
  156. package/src/listeners/api/api.sse.ts +38 -38
  157. package/src/listeners/dns/__tests__/dns.test.ts +118 -118
  158. package/src/listeners/dns/dns.extractor.ts +14 -14
  159. package/src/listeners/dns/dns.listener.ts +61 -61
  160. package/src/listeners/http/__tests__/http.extractor.test.ts +59 -59
  161. package/src/listeners/http/__tests__/http.listener.test.ts +133 -133
  162. package/src/listeners/http/http.extractor.ts +15 -15
  163. package/src/listeners/http/http.listener.ts +110 -110
  164. package/src/listeners/listener.interface.ts +4 -4
  165. package/src/listeners/smtp/__tests__/smtp.extractor.test.ts +69 -69
  166. package/src/listeners/smtp/__tests__/smtp.listener.test.ts +150 -150
  167. package/src/listeners/smtp/smtp.extractor.ts +18 -18
  168. package/src/listeners/smtp/smtp.listener.ts +60 -60
  169. package/src/listeners/ssrf/__tests__/ssrf.extractor.test.ts +41 -41
  170. package/src/listeners/ssrf/__tests__/ssrf.listener.test.ts +87 -87
  171. package/src/listeners/ssrf/ssrf.extractor.ts +14 -14
  172. package/src/listeners/ssrf/ssrf.listener.ts +37 -37
  173. package/src/listeners/tcp/tcp.extractor.ts +16 -16
  174. package/src/listeners/tcp/tcp.listener.ts +61 -61
  175. package/src/listeners/webhook/__tests__/webhook.extractor.test.ts +35 -35
  176. package/src/listeners/webhook/__tests__/webhook.listener.test.ts +122 -122
  177. package/src/listeners/webhook/webhook.extractor.ts +12 -12
  178. package/src/listeners/webhook/webhook.listener.ts +58 -58
  179. package/src/listeners/websocket/__tests__/websocket.extractor.test.ts +33 -33
  180. package/src/listeners/websocket/__tests__/websocket.listener.test.ts +90 -90
  181. package/src/listeners/websocket/websocket.extractor.ts +11 -11
  182. package/src/listeners/websocket/websocket.listener.ts +40 -40
  183. package/src/storage-adapters/adapters/__tests__/memory.storage.test.ts +75 -75
  184. package/src/storage-adapters/adapters/memory.storage.ts +64 -64
  185. package/src/storage-adapters/storage.interface.ts +26 -26
  186. package/src/types/event.types.ts +147 -147
  187. package/tsconfig.json +21 -21
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { RawEvent, RawDnsEvent, RawSmtpEvent, RawTcpEvent, RawSsrfEvent, NormalizedHttpEvent, NormalizedDnsEvent, NormalizedSmtpEvent, NormalizedTcpEvent, NormalizedSsrfEvent, NormalizedWebhookEvent, RawWebhookEvent, NormalizedWebSocketEvent, RawWebSocketEvent } from "../types/event.types";
2
+ export declare class EventNormalizer {
3
+ static normalizeDns(event: RawDnsEvent): NormalizedDnsEvent;
4
+ static normalizeHttp(event: RawEvent): NormalizedHttpEvent;
5
+ static normalizeSmtp(event: RawSmtpEvent): NormalizedSmtpEvent;
6
+ static normalizeTcp(event: RawTcpEvent): NormalizedTcpEvent;
7
+ static normalizeSsrf(raw: RawSsrfEvent): NormalizedSsrfEvent;
8
+ static normalizeWebhook(raw: RawWebhookEvent): NormalizedWebhookEvent;
9
+ static normalizeWebSocket(raw: RawWebSocketEvent): NormalizedWebSocketEvent;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { Storage } from "../storage-adapters/storage.interface";
2
+ import { RawEvent, NormalizedHttpEvent } from "../types/event.types";
3
+ export declare class EventRouter {
4
+ private storage;
5
+ constructor(storage: Storage);
6
+ handleHttp(event: RawEvent): Promise<NormalizedHttpEvent>;
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import { MiddlewarePipeline } from "./middleware";
2
+ import { Router } from "./router";
3
+ export declare class NodeAdapter {
4
+ private router;
5
+ private pipeline;
6
+ constructor(router: Router, pipeline: MiddlewarePipeline);
7
+ handle(req: any, res: any): Promise<void>;
8
+ }
@@ -0,0 +1,2 @@
1
+ import { Request } from "./request";
2
+ export declare function buildRequest(raw: any, params?: Record<string, string>): Request;
@@ -0,0 +1,13 @@
1
+ export declare function compilePath(path: string): ({
2
+ type: string;
3
+ value: string;
4
+ name?: undefined;
5
+ } | {
6
+ type: string;
7
+ name: string;
8
+ value?: undefined;
9
+ } | {
10
+ type: string;
11
+ value?: undefined;
12
+ name?: undefined;
13
+ })[];
@@ -0,0 +1,9 @@
1
+ export declare class HttpError extends Error {
2
+ readonly status: number;
3
+ readonly code: string;
4
+ readonly details?: any;
5
+ constructor(status: number, code: string, message: string, details?: any);
6
+ }
7
+ export declare class ErrorHandler {
8
+ static handle(err: unknown, res: any): void;
9
+ }
@@ -0,0 +1,7 @@
1
+ import { Router } from "./router";
2
+ export declare class HttpServer {
3
+ private router;
4
+ private server;
5
+ constructor(router: Router);
6
+ start(port: number): void;
7
+ }
File without changes
File without changes
@@ -0,0 +1,12 @@
1
+ import { Request } from "./request";
2
+ import { Response } from "./response";
3
+ export type Middleware = (req: Request, res: Response, next: () => Promise<void>) => Promise<void> | void;
4
+ export declare class MiddlewarePipeline {
5
+ private middlewares;
6
+ use(mw: Middleware): this;
7
+ run(req: Request, res: Response): Promise<void>;
8
+ }
9
+ export declare function bodyParserJson(req: Request, res: Response): Promise<void>;
10
+ export declare function bodyParserRaw(req: Request, res: Response): Promise<void>;
11
+ export declare function bodyParserText(req: Request, res: Response): Promise<void>;
12
+ export declare function bodyParserMultipart(req: Request, res: Response): Promise<void>;
@@ -0,0 +1,35 @@
1
+ export interface RequestContext {
2
+ [key: string]: any;
3
+ }
4
+ export declare class Request {
5
+ readonly method: string;
6
+ readonly path: string;
7
+ readonly headers: Record<string, string>;
8
+ readonly query: Record<string, string | string[]>;
9
+ readonly params: Record<string, string>;
10
+ body: any;
11
+ bodyRaw?: Buffer;
12
+ bodyText?: string;
13
+ files?: Array<{
14
+ fieldname: string;
15
+ filename: string;
16
+ contentType: string;
17
+ data: Buffer;
18
+ }>;
19
+ form?: Record<string, string>;
20
+ readonly ip: string;
21
+ readonly raw: any;
22
+ readonly context: RequestContext;
23
+ constructor(options: {
24
+ method: string;
25
+ path: string;
26
+ headers: Record<string, string>;
27
+ query?: Record<string, string | string[]>;
28
+ params?: Record<string, string>;
29
+ body?: any;
30
+ ip?: string;
31
+ raw?: any;
32
+ context?: RequestContext;
33
+ });
34
+ header(name: string): string | undefined;
35
+ }
@@ -0,0 +1,17 @@
1
+ export declare class Response {
2
+ private _status;
3
+ private _headers;
4
+ private _sent;
5
+ private _raw;
6
+ constructor(raw: any);
7
+ status(code: number): this;
8
+ header(name: string, value: string): this;
9
+ json(data: any): void;
10
+ text(data: string): void;
11
+ send(data: any): void;
12
+ stream(readable: NodeJS.ReadableStream): void;
13
+ sse(): void;
14
+ write(data: string): void;
15
+ end(): void;
16
+ private ensureNotSent;
17
+ }
@@ -0,0 +1,28 @@
1
+ import { Middleware } from "./middleware";
2
+ export declare class Router {
3
+ private routes;
4
+ /**
5
+ * Enregistre une route avec middlewares optionnels :
6
+ * router.get("/x", mw1, mw2, handler)
7
+ */
8
+ register(method: string, path: string, ...middlewaresAndHandler: any[]): void;
9
+ /**
10
+ * Trouve la route et extrait les params
11
+ */
12
+ match(method: string, urlPath: string): {
13
+ handler: Function;
14
+ middlewares: Middleware[];
15
+ params: Record<string, string>;
16
+ } | null;
17
+ /**
18
+ * Ton moteur de matching existant — inchangé
19
+ */
20
+ private matchSegments;
21
+ get(path: string, ...middlewaresAndHandler: any[]): void;
22
+ post(path: string, ...middlewaresAndHandler: any[]): void;
23
+ put(path: string, ...middlewaresAndHandler: any[]): void;
24
+ delete(path: string, ...middlewaresAndHandler: any[]): void;
25
+ patch(path: string, ...middlewaresAndHandler: any[]): void;
26
+ options(path: string, ...middlewaresAndHandler: any[]): void;
27
+ head(path: string, ...middlewaresAndHandler: any[]): void;
28
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ export declare class IdGenerator {
2
+ static generate(): string;
3
+ }
@@ -0,0 +1,29 @@
1
+ export type LogLevel = "debug" | "info" | "warn" | "error" | "fatal";
2
+ export interface LoggerOptions {
3
+ level?: LogLevel;
4
+ context?: string;
5
+ enabled?: boolean;
6
+ hooks?: Array<(entry: LogEntry) => void>;
7
+ }
8
+ export interface LogEntry {
9
+ timestamp: string;
10
+ level: LogLevel;
11
+ message: string;
12
+ context?: string;
13
+ data?: any;
14
+ }
15
+ export declare class Logger {
16
+ private level;
17
+ private context?;
18
+ private enabled;
19
+ private hooks;
20
+ constructor(options?: LoggerOptions);
21
+ private shouldLog;
22
+ private emit;
23
+ debug(msg: string, data?: any): void;
24
+ info(msg: string, data?: any): void;
25
+ warn(msg: string, data?: any): void;
26
+ error(msg: string, data?: any): void;
27
+ fatal(msg: string, data?: any): void;
28
+ withContext(context: string): Logger;
29
+ }
@@ -0,0 +1,16 @@
1
+ import { Storage } from "../storage-adapters/storage.interface";
2
+ import { Logger } from "./logger";
3
+ import { AnyNormalizedEvent } from "../types/event.types";
4
+ export type RouterHook = (event: AnyNormalizedEvent) => void | Promise<void>;
5
+ export interface RouterOptions {
6
+ logger?: Logger;
7
+ hooks?: RouterHook[];
8
+ }
9
+ export declare class CoreRouter {
10
+ private storage;
11
+ private logger;
12
+ private hooks;
13
+ constructor(storage: Storage, options?: RouterOptions);
14
+ dispatch(event: AnyNormalizedEvent): Promise<void>;
15
+ addHook(hook: RouterHook): void;
16
+ }
@@ -0,0 +1,25 @@
1
+ import { Logger } from "./logger";
2
+ import { CoreRouter } from "./router";
3
+ import { StorageManager } from "./storage";
4
+ import { Listener } from "../listeners/listener.interface";
5
+ export interface CoreServerOptions {
6
+ logger?: Logger;
7
+ storage?: StorageManager;
8
+ listeners?: Listener[];
9
+ }
10
+ export declare class CoreServer {
11
+ private logger;
12
+ private storage;
13
+ private router;
14
+ private listeners;
15
+ constructor(options?: CoreServerOptions);
16
+ getRouter(): CoreRouter;
17
+ getStorage(): StorageManager;
18
+ start(): Promise<void>;
19
+ stop(): Promise<void>;
20
+ /**
21
+ * Méthode appelée par CoreRouter après chaque event normalisé.
22
+ * Permet de diffuser l’event aux listeners SSE (ApiListener).
23
+ */
24
+ broadcast(event: any): void;
25
+ }
@@ -0,0 +1,24 @@
1
+ import { Storage } from "../storage-adapters/storage.interface";
2
+ import { AnyNormalizedEvent } from "../types/event.types";
3
+ import { Logger } from "./logger";
4
+ export declare class StorageManager implements Storage {
5
+ private events;
6
+ private logger;
7
+ constructor(options?: {
8
+ logger?: Logger;
9
+ });
10
+ save(event: AnyNormalizedEvent): Promise<void>;
11
+ getEvent(id: string): Promise<AnyNormalizedEvent | null>;
12
+ listEvents(params: {
13
+ type?: string;
14
+ page?: number;
15
+ limit?: number;
16
+ }): Promise<AnyNormalizedEvent[]>;
17
+ getAll(): Promise<AnyNormalizedEvent[]>;
18
+ deleteEvent(id: string): Promise<boolean>;
19
+ clearEvents(): Promise<void>;
20
+ getStats(): Promise<{
21
+ total: number;
22
+ byType: Record<string, number>;
23
+ }>;
24
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import { ServerResponse } from "http";
2
+ import { StorageManager } from "../../core/storage";
3
+ export declare class ApiController {
4
+ static listEvents(url: URL, res: ServerResponse, storage: StorageManager): Promise<void>;
5
+ static getEvent(id: string, res: ServerResponse, storage: StorageManager): Promise<void>;
6
+ static deleteAll(res: ServerResponse, storage: StorageManager): Promise<void>;
7
+ static deleteOne(id: string, res: ServerResponse, storage: StorageManager): Promise<void>;
8
+ static stats(res: ServerResponse, storage: StorageManager): Promise<void>;
9
+ }
@@ -0,0 +1,5 @@
1
+ import { IncomingMessage } from "http";
2
+ import { RawEvent } from "../../types/event.types";
3
+ export declare class ApiExtractor {
4
+ static extract(req: IncomingMessage): Promise<RawEvent>;
5
+ }
@@ -0,0 +1,17 @@
1
+ import { Logger } from "../../core/logger";
2
+ import { StorageManager } from "../../core/storage";
3
+ export interface ApiListenerOptions {
4
+ port: number;
5
+ logger?: Logger;
6
+ }
7
+ export declare class ApiListener {
8
+ private storage;
9
+ private options;
10
+ private logger;
11
+ private server;
12
+ private sse;
13
+ constructor(storage: StorageManager, options: ApiListenerOptions);
14
+ start(): Promise<void>;
15
+ stop(): Promise<void>;
16
+ broadcastEvent(event: any): void;
17
+ }
@@ -0,0 +1,5 @@
1
+ import { IncomingMessage, ServerResponse } from "http";
2
+ import { Logger } from "../../core/logger";
3
+ import { StorageManager } from "../../core/storage";
4
+ import { ApiSse } from "./api.sse";
5
+ export declare function handleApiRequest(req: IncomingMessage, res: ServerResponse, storage: StorageManager, sse: ApiSse, logger: Logger): Promise<void>;
@@ -0,0 +1,10 @@
1
+ import { ServerResponse } from "http";
2
+ import { Logger } from "../../core/logger";
3
+ export declare class ApiSse {
4
+ private logger;
5
+ private clients;
6
+ constructor(logger: Logger);
7
+ handle(res: ServerResponse): void;
8
+ broadcast(event: any): void;
9
+ closeAll(): void;
10
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export declare class DnsExtractor {
2
+ static extract(packet: any): {
3
+ ip: any;
4
+ query: any;
5
+ type: any;
6
+ raw: any;
7
+ };
8
+ }
@@ -0,0 +1,15 @@
1
+ import { Logger } from "../../core/logger";
2
+ import { CoreRouter } from "../../core/router";
3
+ export interface DnsListenerOptions {
4
+ server: any;
5
+ logger?: Logger;
6
+ }
7
+ export declare class DnsListener {
8
+ private router;
9
+ private options;
10
+ private logger;
11
+ constructor(router: CoreRouter, options: DnsListenerOptions);
12
+ start(): Promise<void>;
13
+ stop(): Promise<void>;
14
+ private handleQuery;
15
+ }
@@ -0,0 +1,11 @@
1
+ export declare class HttpExtractor {
2
+ static extract(req: any): {
3
+ ip: any;
4
+ method: any;
5
+ path: any;
6
+ headers: any;
7
+ query: any;
8
+ body: any;
9
+ raw: any;
10
+ };
11
+ }
@@ -0,0 +1,17 @@
1
+ import { Logger } from "../../core/logger";
2
+ import { CoreRouter } from "../../core/router";
3
+ export interface HttpListenerOptions {
4
+ port: number;
5
+ logger?: Logger;
6
+ }
7
+ export declare class HttpListener {
8
+ private router;
9
+ private options;
10
+ private server?;
11
+ private logger;
12
+ constructor(router: CoreRouter, options: HttpListenerOptions);
13
+ start(): Promise<void>;
14
+ stop(): Promise<void>;
15
+ private handleRequest;
16
+ private readBody;
17
+ }
@@ -0,0 +1,4 @@
1
+ export interface Listener {
2
+ start(): Promise<void>;
3
+ stop(): Promise<void>;
4
+ }
@@ -0,0 +1,12 @@
1
+ export declare class SmtpExtractor {
2
+ static extract(session: any, body: string): {
3
+ ip: any;
4
+ from: any;
5
+ to: any;
6
+ subject: any;
7
+ raw: {
8
+ session: any;
9
+ body: string;
10
+ };
11
+ };
12
+ }
@@ -0,0 +1,13 @@
1
+ import { CoreRouter } from "../../core/router";
2
+ import { Logger } from "../../core/logger";
3
+ export declare class SmtpListener {
4
+ private router;
5
+ private server;
6
+ private logger;
7
+ constructor(router: CoreRouter, options: {
8
+ server: any;
9
+ logger?: Logger;
10
+ });
11
+ start(): Promise<void>;
12
+ stop(): Promise<void>;
13
+ }
@@ -14,10 +14,8 @@ globals_1.jest.mock("../../../core/event.normalizer");
14
14
  let router;
15
15
  let port;
16
16
  let listener;
17
- (0, globals_1.beforeEach)(() => {
18
- router = {
19
- dispatch: globals_1.jest.fn(),
20
- };
17
+ (0, globals_1.beforeEach)((done) => {
18
+ router = { dispatch: globals_1.jest.fn() };
21
19
  port = 12000 + Math.floor(Math.random() * 2000);
22
20
  ssrf_extractor_1.SsrfExtractor.extract.mockReturnValue({
23
21
  ip: "1.2.3.4",
@@ -40,6 +38,8 @@ globals_1.jest.mock("../../../core/event.normalizer");
40
38
  },
41
39
  });
42
40
  listener = new ssrf_listener_1.SsrfListener(router, port);
41
+ // 🔥 On attend que le serveur soit prêt
42
+ listener["server"].on("listening", done);
43
43
  });
44
44
  (0, globals_1.afterEach)(() => {
45
45
  listener.stop();
@@ -49,18 +49,6 @@ globals_1.jest.mock("../../../core/event.normalizer");
49
49
  const req = http_1.default.request({ hostname: "localhost", port, path: "/ssrf", method: "GET" }, (res) => {
50
50
  (0, globals_1.expect)(res.statusCode).toBe(200);
51
51
  (0, globals_1.expect)(router.dispatch).toHaveBeenCalledTimes(1);
52
- (0, globals_1.expect)(router.dispatch).toHaveBeenCalledWith({
53
- id: "123",
54
- type: "ssrf",
55
- timestamp: 111,
56
- sourceIp: "1.2.3.4",
57
- request: {
58
- method: "GET",
59
- path: "/ssrf",
60
- headers: {},
61
- query: {},
62
- },
63
- });
64
52
  resolve();
65
53
  });
66
54
  req.end();
@@ -0,0 +1,10 @@
1
+ export declare class SsrfExtractor {
2
+ static extract(req: any): {
3
+ ip: any;
4
+ method: any;
5
+ path: any;
6
+ headers: any;
7
+ query: any;
8
+ raw: any;
9
+ };
10
+ }
@@ -0,0 +1,8 @@
1
+ import { CoreRouter } from "../../core/router";
2
+ export declare class SsrfListener {
3
+ private router;
4
+ private server;
5
+ private logger;
6
+ constructor(router: CoreRouter, port: number);
7
+ stop(): void;
8
+ }
@@ -0,0 +1,4 @@
1
+ import { RawTcpEvent, NormalizedTcpEvent } from "../../types/event.types";
2
+ export declare class TcpExtractor {
3
+ static normalize(raw: RawTcpEvent): NormalizedTcpEvent;
4
+ }
@@ -0,0 +1,18 @@
1
+ import { Listener } from "../listener.interface";
2
+ import { CoreRouter } from "../../core/router";
3
+ import { StorageManager } from "../../core/storage";
4
+ import { Logger } from "../../core/logger";
5
+ export interface TcpListenerOptions {
6
+ port: number;
7
+ logger?: Logger;
8
+ }
9
+ export declare class TcpListener implements Listener {
10
+ private router;
11
+ private storage;
12
+ private options;
13
+ private server;
14
+ private logger;
15
+ constructor(router: CoreRouter, storage: StorageManager, options: TcpListenerOptions);
16
+ start(): Promise<void>;
17
+ stop(): Promise<void>;
18
+ }
@@ -0,0 +1,8 @@
1
+ export declare class WebhookExtractor {
2
+ static extract(req: any, body: any): {
3
+ ip: any;
4
+ headers: any;
5
+ body: any;
6
+ raw: any;
7
+ };
8
+ }
@@ -0,0 +1,8 @@
1
+ import { CoreRouter } from "../../core/router";
2
+ export declare class WebhookListener {
3
+ private router;
4
+ private server;
5
+ private logger;
6
+ constructor(router: CoreRouter, port: number);
7
+ stop(): void;
8
+ }
@@ -0,0 +1,10 @@
1
+ export declare class WebSocketExtractor {
2
+ static extract(ws: any, req: any, message: string): {
3
+ ip: any;
4
+ message: string;
5
+ raw: {
6
+ ws: any;
7
+ req: any;
8
+ };
9
+ };
10
+ }