@j3r3mcdev/oast-server 1.1.12 → 1.1.14

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 (106) hide show
  1. package/dist/listeners/api/api.routes.js +31 -5
  2. package/package.json +4 -1
  3. package/.env.example +0 -0
  4. package/.github/workflows/ci.yml +0 -29
  5. package/.github/workflows/publish.yml +0 -31
  6. package/image.png +0 -0
  7. package/jest.config.js +0 -14
  8. package/sadmin list shadows +0 -9
  9. package/src/api/controllers/__tests__/tasks.controller.test.ts +0 -74
  10. package/src/api/controllers/events.controller.ts +0 -10
  11. package/src/api/controllers/health.controller.ts +0 -7
  12. package/src/api/controllers/index.ts +0 -0
  13. package/src/api/controllers/tasks.controller.ts +0 -41
  14. package/src/api/dto/__tests__/create-task.dto.test.ts +0 -41
  15. package/src/api/dto/__tests__/filter-tasks.dto.test.ts +0 -35
  16. package/src/api/dto/create-task.dto.ts +0 -33
  17. package/src/api/dto/filter-tasks.dto.ts +0 -33
  18. package/src/api/services/__tests__/events.service.test.ts +0 -41
  19. package/src/api/services/__tests__/tasks.service.test.ts +0 -41
  20. package/src/api/services/events.service.ts +0 -17
  21. package/src/api/services/tasks.service.ts +0 -79
  22. package/src/api/sse/events.stream.ts +0 -90
  23. package/src/bootstrap.ts +0 -89
  24. package/src/config/constants.ts +0 -0
  25. package/src/config/env.ts +0 -0
  26. package/src/core/__tests__/core-router.test.ts +0 -30
  27. package/src/core/__tests__/core-server.test.ts +0 -44
  28. package/src/core/__tests__/event.normalizer.test.ts +0 -56
  29. package/src/core/__tests__/event.router.test.ts +0 -89
  30. package/src/core/__tests__/logger.test.ts +0 -32
  31. package/src/core/__tests__/storage-manager.test.ts +0 -74
  32. package/src/core/event.normalizer.ts +0 -167
  33. package/src/core/event.router.ts +0 -13
  34. package/src/core/http/__tests__/adapter-node.test.ts +0 -52
  35. package/src/core/http/__tests__/body-parser-multipart.test.ts +0 -41
  36. package/src/core/http/__tests__/body-parser-raw.test.ts +0 -28
  37. package/src/core/http/__tests__/body-parser-text.test.ts +0 -28
  38. package/src/core/http/__tests__/compile-path.test.ts +0 -39
  39. package/src/core/http/__tests__/middleware-pipeline.test.ts +0 -51
  40. package/src/core/http/__tests__/request.test.ts +0 -34
  41. package/src/core/http/__tests__/response.test.ts +0 -35
  42. package/src/core/http/__tests__/router-match.test.ts +0 -171
  43. package/src/core/http/adapter-node.ts +0 -51
  44. package/src/core/http/buildRequest.ts +0 -18
  45. package/src/core/http/compile-path.ts +0 -32
  46. package/src/core/http/errors.ts +0 -37
  47. package/src/core/http/http-server.ts +0 -52
  48. package/src/core/http/index.ts +0 -0
  49. package/src/core/http/main.ts +0 -0
  50. package/src/core/http/middleware.ts +0 -160
  51. package/src/core/http/request.ts +0 -55
  52. package/src/core/http/response.ts +0 -93
  53. package/src/core/http/router.ts +0 -138
  54. package/src/core/http/utils.ts +0 -0
  55. package/src/core/id-generator.ts +0 -8
  56. package/src/core/logger.ts +0 -113
  57. package/src/core/router.ts +0 -44
  58. package/src/core/server.ts +0 -85
  59. package/src/core/storage.ts +0 -64
  60. package/src/index.ts +0 -14
  61. package/src/listeners/api/__tests__/api.controller.test.ts +0 -116
  62. package/src/listeners/api/__tests__/api.extractor.test.ts +0 -46
  63. package/src/listeners/api/__tests__/api.listener.test.ts +0 -82
  64. package/src/listeners/api/__tests__/api.routes.test.ts +0 -155
  65. package/src/listeners/api/__tests__/api.sse.test.ts +0 -105
  66. package/src/listeners/api/api.controllers.ts +0 -67
  67. package/src/listeners/api/api.extractor.ts +0 -43
  68. package/src/listeners/api/api.listener.ts +0 -50
  69. package/src/listeners/api/api.routes.ts +0 -76
  70. package/src/listeners/api/api.sse.ts +0 -38
  71. package/src/listeners/dns/__tests__/dns.test.ts +0 -118
  72. package/src/listeners/dns/dns.extractor.ts +0 -14
  73. package/src/listeners/dns/dns.listener.ts +0 -61
  74. package/src/listeners/http/__tests__/http.extractor.test.ts +0 -59
  75. package/src/listeners/http/__tests__/http.listener.test.ts +0 -133
  76. package/src/listeners/http/http.extractor.ts +0 -15
  77. package/src/listeners/http/http.listener.ts +0 -110
  78. package/src/listeners/listener.interface.ts +0 -4
  79. package/src/listeners/smtp/__tests__/smtp.extractor.test.ts +0 -69
  80. package/src/listeners/smtp/__tests__/smtp.listener.test.ts +0 -150
  81. package/src/listeners/smtp/smtp.extractor.ts +0 -18
  82. package/src/listeners/smtp/smtp.listener.ts +0 -78
  83. package/src/listeners/ssrf/__tests__/ssrf.extractor.test.ts +0 -41
  84. package/src/listeners/ssrf/__tests__/ssrf.listener.test.ts +0 -87
  85. package/src/listeners/ssrf/ssrf.extractor.ts +0 -14
  86. package/src/listeners/ssrf/ssrf.listener.ts +0 -37
  87. package/src/listeners/tcp/tcp.extractor.ts +0 -16
  88. package/src/listeners/tcp/tcp.listener.ts +0 -61
  89. package/src/listeners/webhook/__tests__/webhook.extractor.test.ts +0 -35
  90. package/src/listeners/webhook/__tests__/webhook.listener.test.ts +0 -122
  91. package/src/listeners/webhook/webhook.extractor.ts +0 -12
  92. package/src/listeners/webhook/webhook.listener.ts +0 -58
  93. package/src/listeners/websocket/__tests__/websocket.extractor.test.ts +0 -33
  94. package/src/listeners/websocket/__tests__/websocket.listener.test.ts +0 -90
  95. package/src/listeners/websocket/websocket.extractor.ts +0 -11
  96. package/src/listeners/websocket/websocket.listener.ts +0 -40
  97. package/src/storage-adapters/adapters/__tests__/memory.storage.test.ts +0 -75
  98. package/src/storage-adapters/adapters/memory.storage.ts +0 -64
  99. package/src/storage-adapters/adapters/redis.storage.ts +0 -0
  100. package/src/storage-adapters/adapters/sqlite.storage.ts +0 -0
  101. package/src/storage-adapters/storage.interface.ts +0 -26
  102. package/src/types/event.types.ts +0 -166
  103. package/src/utils/token.ts +0 -0
  104. package/src-api.txt +0 -0
  105. package/src-architecture.txt +0 -0
  106. package/tsconfig.json +0 -20
@@ -1,122 +0,0 @@
1
- import {
2
- describe,
3
- it,
4
- expect,
5
- jest,
6
- beforeEach,
7
- afterEach,
8
- } from "@jest/globals";
9
-
10
- import http from "http";
11
- import { WebhookListener } from "../webhook.listener";
12
- import { WebhookExtractor } from "../webhook.extractor";
13
- import { EventNormalizer } from "../../../core/event.normalizer";
14
-
15
- jest.mock("../webhook.extractor");
16
- jest.mock("../../../core/event.normalizer");
17
-
18
- describe("WebhookListener", () => {
19
- let router: any;
20
- let port: number;
21
- let listener: WebhookListener;
22
-
23
- beforeEach(() => {
24
- router = {
25
- dispatch: jest.fn(),
26
- };
27
-
28
- port = 13000 + Math.floor(Math.random() * 2000);
29
-
30
- (WebhookExtractor.extract as jest.Mock).mockReturnValue({
31
- ip: "1.2.3.4",
32
- headers: { "x-test": "ok" },
33
- body: { hello: "world" },
34
- raw: {},
35
- });
36
-
37
- (EventNormalizer.normalizeWebhook as jest.Mock).mockReturnValue({
38
- id: "abc",
39
- type: "webhook",
40
- timestamp: 111,
41
- sourceIp: "1.2.3.4",
42
- headers: { "x-test": "ok" },
43
- body: { hello: "world" },
44
- });
45
-
46
- listener = new WebhookListener(router, port);
47
- });
48
-
49
- afterEach(() => {
50
- listener.stop();
51
- });
52
-
53
- it("appelle router.dispatch avec l'événement normalisé", async () => {
54
- await new Promise<void>((resolve) => {
55
- const req = http.request(
56
- {
57
- hostname: "localhost",
58
- port,
59
- path: "/",
60
- method: "POST",
61
- headers: { "content-type": "application/json" },
62
- },
63
- (res) => {
64
- expect(res.statusCode).toBe(200);
65
- expect(router.dispatch).toHaveBeenCalledTimes(1);
66
- expect(router.dispatch).toHaveBeenCalledWith({
67
- id: "abc",
68
- type: "webhook",
69
- timestamp: 111,
70
- sourceIp: "1.2.3.4",
71
- headers: { "x-test": "ok" },
72
- body: { hello: "world" },
73
- });
74
- resolve();
75
- },
76
- );
77
-
78
- req.write(JSON.stringify({ hello: "world" }));
79
- req.end();
80
- });
81
- });
82
-
83
- it("retourne 500 si router.dispatch échoue", async () => {
84
- router.dispatch.mockRejectedValue(new Error("fail"));
85
-
86
- await new Promise<void>((resolve) => {
87
- const req = http.request(
88
- {
89
- hostname: "localhost",
90
- port,
91
- path: "/",
92
- method: "POST",
93
- },
94
- (res) => {
95
- expect(res.statusCode).toBe(500);
96
- resolve();
97
- },
98
- );
99
-
100
- req.write("{}");
101
- req.end();
102
- });
103
- });
104
-
105
- it("retourne 405 si la méthode n'est pas POST", async () => {
106
- await new Promise<void>((resolve) => {
107
- const req = http.request(
108
- {
109
- hostname: "localhost",
110
- port,
111
- path: "/",
112
- method: "GET",
113
- },
114
- (res) => {
115
- expect(res.statusCode).toBe(405);
116
- resolve();
117
- },
118
- );
119
- req.end();
120
- });
121
- });
122
- });
@@ -1,12 +0,0 @@
1
- export class WebhookExtractor {
2
- static extract(req: any, body: any) {
3
- const headers = req.headers ?? {};
4
-
5
- return {
6
- ip: req.ip ?? headers["x-forwarded-for"] ?? "",
7
- headers,
8
- body,
9
- raw: req,
10
- };
11
- }
12
- }
@@ -1,58 +0,0 @@
1
- import http from "http";
2
- import { CoreRouter } from "../../core/router";
3
- import { WebhookExtractor } from "./webhook.extractor";
4
- import { EventNormalizer } from "../../core/event.normalizer";
5
- import { Logger } from "../../core/logger";
6
-
7
- export class WebhookListener {
8
- private router: CoreRouter;
9
- private server: http.Server;
10
- private logger: Logger;
11
-
12
- constructor(router: CoreRouter, port: number) {
13
- this.router = router;
14
- this.logger = new Logger({ context: "WebhookListener" });
15
-
16
- this.server = http.createServer(async (req, res) => {
17
- if (req.method !== "POST") {
18
- res.writeHead(405);
19
- return res.end("Method Not Allowed");
20
- }
21
-
22
- let chunks: Buffer[] = [];
23
-
24
- req.on("data", (chunk) => chunks.push(chunk));
25
-
26
- req.on("end", async () => {
27
- try {
28
- const bodyRaw = Buffer.concat(chunks).toString();
29
- let body: any = null;
30
-
31
- try {
32
- body = JSON.parse(bodyRaw);
33
- } catch {
34
- body = bodyRaw;
35
- }
36
-
37
- const extracted = WebhookExtractor.extract(req, body);
38
- const event = EventNormalizer.normalizeWebhook(extracted);
39
-
40
- await this.router.dispatch(event);
41
-
42
- res.writeHead(200);
43
- res.end("OK");
44
- } catch (err) {
45
- res.writeHead(500);
46
- res.end("ERROR");
47
- }
48
- });
49
- });
50
-
51
- this.server.listen(port);
52
- }
53
-
54
- stop() {
55
- this.server.close();
56
- this.logger.info("Webhook Listener stopped");
57
- }
58
- }
@@ -1,33 +0,0 @@
1
- import { describe, it, expect } from "@jest/globals";
2
- import { WebSocketExtractor } from "../websocket.extractor";
3
-
4
- describe("WebSocketExtractor", () => {
5
- it("extrait correctement les données", () => {
6
- const ws: any = {};
7
- const req: any = {
8
- socket: { remoteAddress: "1.2.3.4" },
9
- headers: { host: "example.com" },
10
- };
11
-
12
- const extracted = WebSocketExtractor.extract(ws, req, "hello");
13
-
14
- expect(extracted).toEqual({
15
- ip: "1.2.3.4",
16
- message: "hello",
17
- raw: { ws, req },
18
- });
19
- });
20
-
21
- it("retourne une structure complète même si des champs manquent", () => {
22
- const ws: any = {};
23
- const req: any = {};
24
-
25
- const extracted = WebSocketExtractor.extract(ws, req, "test");
26
-
27
- expect(extracted).toEqual({
28
- ip: "",
29
- message: "test",
30
- raw: { ws, req },
31
- });
32
- });
33
- });
@@ -1,90 +0,0 @@
1
- import {
2
- describe,
3
- it,
4
- expect,
5
- jest,
6
- beforeEach,
7
- afterEach,
8
- } from "@jest/globals";
9
-
10
- import { WebSocketServer } from "ws";
11
- import WebSocket from "ws";
12
- import { WebSocketListener } from "../websocket.listener";
13
- import { WebSocketExtractor } from "../websocket.extractor";
14
- import { EventNormalizer } from "../../../core/event.normalizer";
15
-
16
- jest.mock("../websocket.extractor");
17
- jest.mock("../../../core/event.normalizer");
18
-
19
- describe("WebSocketListener", () => {
20
- let router: any;
21
- let port: number;
22
- let listener: WebSocketListener;
23
-
24
- beforeEach(() => {
25
- router = {
26
- dispatch: jest.fn(),
27
- };
28
-
29
- port = 14000 + Math.floor(Math.random() * 2000);
30
-
31
- (WebSocketExtractor.extract as jest.Mock).mockReturnValue({
32
- ip: "1.2.3.4",
33
- message: "hello",
34
- raw: {},
35
- });
36
-
37
- (EventNormalizer.normalizeWebSocket as jest.Mock).mockReturnValue({
38
- id: "ws123",
39
- type: "websocket",
40
- timestamp: 111,
41
- sourceIp: "1.2.3.4",
42
- message: "hello",
43
- });
44
-
45
- listener = new WebSocketListener(router, port);
46
- });
47
-
48
- afterEach(() => {
49
- listener.stop();
50
- });
51
-
52
- it("appelle router.dispatch quand un message est reçu", async () => {
53
- const client = new WebSocket(`ws://localhost:${port}`);
54
-
55
- await new Promise<void>((resolve) => {
56
- client.on("open", () => {
57
- client.send("hello");
58
- setTimeout(() => {
59
- expect(router.dispatch).toHaveBeenCalledTimes(1);
60
- expect(router.dispatch).toHaveBeenCalledWith({
61
- id: "ws123",
62
- type: "websocket",
63
- timestamp: 111,
64
- sourceIp: "1.2.3.4",
65
- message: "hello",
66
- });
67
- client.close();
68
- resolve();
69
- }, 50);
70
- });
71
- });
72
- });
73
-
74
- it("ne plante pas si dispatch échoue", async () => {
75
- router.dispatch.mockRejectedValue(new Error("fail"));
76
-
77
- const client = new WebSocket(`ws://localhost:${port}`);
78
-
79
- await new Promise<void>((resolve) => {
80
- client.on("open", () => {
81
- client.send("hello");
82
- setTimeout(() => {
83
- expect(router.dispatch).toHaveBeenCalledTimes(1);
84
- client.close();
85
- resolve();
86
- }, 50);
87
- });
88
- });
89
- });
90
- });
@@ -1,11 +0,0 @@
1
- export class WebSocketExtractor {
2
- static extract(ws: any, req: any, message: string) {
3
- const headers = req.headers ?? {};
4
-
5
- return {
6
- ip: req.socket?.remoteAddress ?? headers["x-forwarded-for"] ?? "",
7
- message,
8
- raw: { ws, req },
9
- };
10
- }
11
- }
@@ -1,40 +0,0 @@
1
- import { WebSocketServer, WebSocket, RawData } from "ws";
2
- import type { IncomingMessage } from "http";
3
- import { CoreRouter } from "../../core/router";
4
- import { WebSocketExtractor } from "./websocket.extractor";
5
- import { EventNormalizer } from "../../core/event.normalizer";
6
- import { Logger } from "../../core/logger";
7
-
8
- export class WebSocketListener {
9
- private router: CoreRouter;
10
- private server: WebSocketServer;
11
- private logger: Logger;
12
-
13
- constructor(router: CoreRouter, port: number) {
14
- this.router = router;
15
- this.logger = new Logger({ context: "WebSocketListener" });
16
-
17
- this.server = new WebSocketServer({ port });
18
-
19
- this.server.on("connection", (ws: WebSocket, req: IncomingMessage) => {
20
- ws.on("message", async (data: RawData) => {
21
- try {
22
- const message = data.toString();
23
- const extracted = WebSocketExtractor.extract(ws, req, message);
24
- const event = EventNormalizer.normalizeWebSocket(extracted);
25
-
26
- await this.router.dispatch(event);
27
- } catch (err) {
28
- this.logger.error("WebSocket error", err);
29
- }
30
- });
31
- });
32
-
33
- this.logger.info(`WebSocket Listener listening on port ${port}`);
34
- }
35
-
36
- stop() {
37
- this.server.close();
38
- this.logger.info("WebSocket Listener stopped");
39
- }
40
- }
@@ -1,75 +0,0 @@
1
- import { MemoryStorage } from "../memory.storage";
2
- import { describe, it, expect } from "@jest/globals";
3
- import { NormalizedHttpEvent } from "../../../types/event.types";
4
-
5
- describe("MemoryStorage", () => {
6
- it("sauvegarde un événement", async () => {
7
- const storage = new MemoryStorage();
8
-
9
- const event: NormalizedHttpEvent = {
10
- id: "1",
11
- type: "http",
12
- timestamp: 123,
13
- sourceIp: "1.1.1.1",
14
- request: {
15
- method: "GET",
16
- path: "/",
17
- headers: {},
18
- query: {},
19
- body: {},
20
- },
21
- };
22
-
23
- await storage.save(event);
24
-
25
- const all = await storage.getAll();
26
- expect(all).toEqual([event]);
27
- });
28
-
29
- it("retourne un événement par ID", async () => {
30
- const storage = new MemoryStorage();
31
-
32
- const event: NormalizedHttpEvent = {
33
- id: "1",
34
- type: "http",
35
- timestamp: Date.now(),
36
- sourceIp: "1.1.1.1",
37
- request: {
38
- method: "GET",
39
- path: "/test",
40
- headers: {},
41
- query: {},
42
- body: "",
43
- },
44
- };
45
-
46
- await storage.save(event);
47
-
48
- const found = await storage.getById("1");
49
- expect(found).toEqual(event);
50
- });
51
-
52
- it("supprime un événement", async () => {
53
- const storage = new MemoryStorage();
54
-
55
- const event: NormalizedHttpEvent = {
56
- id: "1",
57
- type: "http",
58
- timestamp: Date.now(),
59
- sourceIp: "1.1.1.1",
60
- request: {
61
- method: "GET",
62
- path: "/test",
63
- headers: {},
64
- query: {},
65
- body: "",
66
- },
67
- };
68
-
69
- await storage.save(event);
70
- await storage.delete("1");
71
-
72
- const all = await storage.getAll();
73
- expect(all).toEqual([]);
74
- });
75
- });
@@ -1,64 +0,0 @@
1
- import { Storage } from "../storage.interface";
2
- import { AnyNormalizedEvent } from "../../types/event.types";
3
-
4
- export class MemoryStorage implements Storage {
5
- private events = new Map<string, AnyNormalizedEvent>();
6
-
7
- async save(event: AnyNormalizedEvent): Promise<void> {
8
- this.events.set(event.id, event);
9
- }
10
-
11
- async getEvent(id: string): Promise<AnyNormalizedEvent | null> {
12
- return this.events.get(id) ?? null;
13
- }
14
-
15
- async listEvents(params: {
16
- type?: string;
17
- page?: number;
18
- limit?: number;
19
- }): Promise<AnyNormalizedEvent[]> {
20
- const { type, page = 1, limit = 50 } = params;
21
-
22
- const all = Array.from(this.events.values());
23
- const filtered = type ? all.filter((e) => e.type === type) : all;
24
-
25
- const start = (page - 1) * limit;
26
- return filtered.slice(start, start + limit);
27
- }
28
-
29
- async getAll(): Promise<AnyNormalizedEvent[]> {
30
- return Array.from(this.events.values());
31
- }
32
-
33
- async deleteEvent(id: string): Promise<boolean> {
34
- return this.events.delete(id);
35
- }
36
-
37
- async clearEvents(): Promise<void> {
38
- this.events.clear();
39
- }
40
-
41
- async getStats(): Promise<{
42
- total: number;
43
- byType: Record<string, number>;
44
- }> {
45
- const all = Array.from(this.events.values());
46
- const byType: Record<string, number> = {};
47
-
48
- for (const e of all) {
49
- byType[e.type] = (byType[e.type] ?? 0) + 1;
50
- }
51
-
52
- return {
53
- total: all.length,
54
- byType,
55
- };
56
- }
57
- async getById(id: string) {
58
- return this.getEvent(id);
59
- }
60
-
61
- async delete(id: string) {
62
- return this.deleteEvent(id);
63
- }
64
- }
File without changes
File without changes
@@ -1,26 +0,0 @@
1
- import { AnyNormalizedEvent } from "../types/event.types";
2
-
3
- export interface StorageListParams {
4
- type?: string;
5
- page?: number;
6
- limit?: number;
7
- }
8
-
9
- export interface Storage {
10
- save(event: AnyNormalizedEvent): Promise<void>;
11
-
12
- getEvent(id: string): Promise<AnyNormalizedEvent | null>;
13
-
14
- listEvents(params: StorageListParams): Promise<AnyNormalizedEvent[]>;
15
-
16
- deleteEvent(id: string): Promise<boolean>;
17
-
18
- clearEvents(): Promise<void>;
19
-
20
- getAll(): Promise<AnyNormalizedEvent[]>;
21
-
22
- getStats(): Promise<{
23
- total: number;
24
- byType: Record<string, number>;
25
- }>;
26
- }
@@ -1,166 +0,0 @@
1
- //
2
- // RAW EVENTS
3
- //
4
- export interface RawEvent {
5
- ip: string;
6
- method: string;
7
- path: string;
8
- headers: Record<string, string | string[] | undefined>;
9
- query: Record<string, any>;
10
- body: any;
11
- raw: any;
12
- }
13
-
14
- export interface RawDnsEvent {
15
- ip: string;
16
- query: string;
17
- recordType: string;
18
- raw: any;
19
- }
20
-
21
- export interface RawSmtpEvent {
22
- ip: string;
23
- from: string;
24
- to: string[];
25
- subject: string;
26
- body: string;
27
- raw: any;
28
- }
29
-
30
- export interface RawTcpEvent {
31
- ip: string;
32
- port: number;
33
- data: string;
34
- raw: any;
35
- }
36
-
37
- export interface RawSsrfEvent {
38
- ip: string;
39
- method: string | undefined;
40
- path: string | undefined;
41
- headers: Record<string, string | string[] | undefined>;
42
- query: Record<string, any>;
43
- raw: any;
44
- }
45
-
46
- export interface RawWebhookEvent {
47
- ip: string;
48
- headers: Record<string, string | string[] | undefined>;
49
- body: any;
50
- raw: any;
51
- }
52
-
53
- export interface RawWebSocketEvent {
54
- ip: string;
55
- message: string;
56
- raw: any;
57
- }
58
-
59
- export interface RawApiEvent {
60
- ip: string;
61
- body: any;
62
- raw: any;
63
- }
64
-
65
- //
66
- // NORMALIZED EVENTS
67
- //
68
- export interface NormalizedHttpEvent {
69
- id: string;
70
- type: "http";
71
- timestamp: number;
72
- sourceIp: string;
73
- request: {
74
- method: string;
75
- path: string;
76
- headers: Record<string, string | string[] | undefined>;
77
- query: Record<string, any>;
78
- body: any;
79
- };
80
- }
81
-
82
- export interface NormalizedDnsEvent {
83
- id: string;
84
- type: "dns";
85
- timestamp: number;
86
- ip: string;
87
- query: string;
88
- recordType: string;
89
- raw: any;
90
- }
91
-
92
- export interface NormalizedSmtpEvent {
93
- id: string;
94
- type: "smtp";
95
- timestamp: number;
96
- ip: string;
97
- from: string;
98
- to: string[];
99
- subject: string;
100
- body: string;
101
- raw: any;
102
- }
103
-
104
- export interface NormalizedTcpEvent {
105
- id: string;
106
- type: "tcp";
107
- timestamp: number;
108
- ip: string;
109
- port: number;
110
- data: string;
111
- raw: any;
112
- }
113
-
114
- export interface NormalizedSsrfEvent {
115
- id: string;
116
- type: "ssrf";
117
- timestamp: number;
118
- sourceIp: string;
119
- request: {
120
- method: string | undefined;
121
- path: string | undefined;
122
- headers: Record<string, string | string[] | undefined>;
123
- query: Record<string, any>;
124
- };
125
- }
126
-
127
- export interface NormalizedWebhookEvent {
128
- id: string;
129
- type: "webhook";
130
- timestamp: number;
131
- sourceIp: string;
132
- headers: Record<string, string | string[] | undefined>;
133
- body: any;
134
- }
135
-
136
- export interface NormalizedWebSocketEvent {
137
- id: string;
138
- type: "websocket";
139
- timestamp: number;
140
- sourceIp: string;
141
- message: string;
142
- }
143
-
144
- export interface NormalizedApiEvent {
145
- id: string;
146
- type: "api";
147
- timestamp: number;
148
- sourceIp: string;
149
- request: {
150
- body: any;
151
- };
152
- raw: any;
153
- }
154
-
155
- //
156
- // UNION
157
- //
158
- export type AnyNormalizedEvent =
159
- | NormalizedHttpEvent
160
- | NormalizedDnsEvent
161
- | NormalizedSmtpEvent
162
- | NormalizedTcpEvent
163
- | NormalizedSsrfEvent
164
- | NormalizedWebhookEvent
165
- | NormalizedWebSocketEvent
166
- | NormalizedApiEvent;
File without changes