@j3r3mcdev/oast-server 1.1.1 → 1.1.3

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 (191) 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/bootstrap.d.ts +1 -0
  19. package/dist/bootstrap.js +76 -0
  20. package/dist/config/constants.d.ts +0 -0
  21. package/dist/config/env.d.ts +0 -0
  22. package/dist/core/__tests__/core-router.test.d.ts +1 -0
  23. package/dist/core/__tests__/core-server.test.d.ts +1 -0
  24. package/dist/core/__tests__/event.normalizer.test.d.ts +1 -0
  25. package/dist/core/__tests__/event.router.test.d.ts +1 -0
  26. package/dist/core/__tests__/logger.test.d.ts +1 -0
  27. package/dist/core/__tests__/storage-manager.test.d.ts +1 -0
  28. package/dist/core/event.normalizer.d.ts +10 -0
  29. package/dist/core/event.router.d.ts +7 -0
  30. package/dist/core/http/__tests__/adapter-node.test.d.ts +1 -0
  31. package/dist/core/http/__tests__/body-parser-multipart.test.d.ts +1 -0
  32. package/dist/core/http/__tests__/body-parser-raw.test.d.ts +1 -0
  33. package/dist/core/http/__tests__/body-parser-text.test.d.ts +1 -0
  34. package/dist/core/http/__tests__/compile-path.test.d.ts +1 -0
  35. package/dist/core/http/__tests__/middleware-pipeline.test.d.ts +1 -0
  36. package/dist/core/http/__tests__/request.test.d.ts +1 -0
  37. package/dist/core/http/__tests__/response.test.d.ts +1 -0
  38. package/dist/core/http/__tests__/router-match.test.d.ts +1 -0
  39. package/dist/core/http/adapter-node.d.ts +8 -0
  40. package/dist/core/http/buildRequest.d.ts +2 -0
  41. package/dist/core/http/compile-path.d.ts +13 -0
  42. package/dist/core/http/errors.d.ts +9 -0
  43. package/dist/core/http/http-server.d.ts +7 -0
  44. package/dist/core/http/index.d.ts +0 -0
  45. package/dist/core/http/main.d.ts +0 -0
  46. package/dist/core/http/middleware.d.ts +12 -0
  47. package/dist/core/http/request.d.ts +35 -0
  48. package/dist/core/http/response.d.ts +17 -0
  49. package/dist/core/http/router.d.ts +28 -0
  50. package/dist/core/http/utils.d.ts +0 -0
  51. package/dist/core/id-generator.d.ts +3 -0
  52. package/dist/core/logger.d.ts +29 -0
  53. package/dist/core/router.d.ts +16 -0
  54. package/dist/core/server.d.ts +25 -0
  55. package/dist/core/storage.d.ts +24 -0
  56. package/dist/index.d.ts +9 -0
  57. package/dist/index.js +19 -74
  58. package/dist/listeners/api/__tests__/api.controller.test.d.ts +1 -0
  59. package/dist/listeners/api/__tests__/api.extractor.test.d.ts +1 -0
  60. package/dist/listeners/api/__tests__/api.listener.test.d.ts +1 -0
  61. package/dist/listeners/api/__tests__/api.routes.test.d.ts +1 -0
  62. package/dist/listeners/api/__tests__/api.sse.test.d.ts +1 -0
  63. package/dist/listeners/api/api.controllers.d.ts +9 -0
  64. package/dist/listeners/api/api.extractor.d.ts +5 -0
  65. package/dist/listeners/api/api.listener.d.ts +17 -0
  66. package/dist/listeners/api/api.routes.d.ts +5 -0
  67. package/dist/listeners/api/api.sse.d.ts +10 -0
  68. package/dist/listeners/dns/__tests__/dns.test.d.ts +1 -0
  69. package/dist/listeners/dns/dns.extractor.d.ts +8 -0
  70. package/dist/listeners/dns/dns.listener.d.ts +15 -0
  71. package/dist/listeners/http/__tests__/http.extractor.test.d.ts +1 -0
  72. package/dist/listeners/http/__tests__/http.listener.test.d.ts +1 -0
  73. package/dist/listeners/http/http.extractor.d.ts +11 -0
  74. package/dist/listeners/http/http.listener.d.ts +17 -0
  75. package/dist/listeners/listener.interface.d.ts +4 -0
  76. package/dist/listeners/smtp/__tests__/smtp.extractor.test.d.ts +1 -0
  77. package/dist/listeners/smtp/__tests__/smtp.listener.test.d.ts +1 -0
  78. package/dist/listeners/smtp/smtp.extractor.d.ts +12 -0
  79. package/dist/listeners/smtp/smtp.listener.d.ts +13 -0
  80. package/dist/listeners/ssrf/__tests__/ssrf.extractor.test.d.ts +1 -0
  81. package/dist/listeners/ssrf/__tests__/ssrf.listener.test.d.ts +1 -0
  82. package/dist/listeners/ssrf/__tests__/ssrf.listener.test.js +4 -16
  83. package/dist/listeners/ssrf/ssrf.extractor.d.ts +10 -0
  84. package/dist/listeners/ssrf/ssrf.listener.d.ts +8 -0
  85. package/dist/listeners/tcp/tcp.extractor.d.ts +4 -0
  86. package/dist/listeners/tcp/tcp.listener.d.ts +18 -0
  87. package/dist/listeners/webhook/__tests__/webhook.extractor.test.d.ts +1 -0
  88. package/dist/listeners/webhook/__tests__/webhook.listener.test.d.ts +1 -0
  89. package/dist/listeners/webhook/webhook.extractor.d.ts +8 -0
  90. package/dist/listeners/webhook/webhook.listener.d.ts +8 -0
  91. package/dist/listeners/websocket/__tests__/websocket.extractor.test.d.ts +1 -0
  92. package/dist/listeners/websocket/__tests__/websocket.listener.test.d.ts +1 -0
  93. package/dist/listeners/websocket/websocket.extractor.d.ts +10 -0
  94. package/dist/listeners/websocket/websocket.listener.d.ts +8 -0
  95. package/dist/storage-adapters/adapters/__tests__/memory.storage.test.d.ts +1 -0
  96. package/dist/storage-adapters/adapters/memory.storage.d.ts +21 -0
  97. package/dist/storage-adapters/adapters/redis.storage.d.ts +0 -0
  98. package/dist/storage-adapters/adapters/sqlite.storage.d.ts +0 -0
  99. package/dist/storage-adapters/storage.interface.d.ts +18 -0
  100. package/dist/types/event.types.d.ts +118 -0
  101. package/dist/utils/token.d.ts +0 -0
  102. package/jest.config.js +14 -14
  103. package/package.json +45 -45
  104. package/sadmin list shadows +9 -9
  105. package/src/api/controllers/__tests__/tasks.controller.test.ts +74 -74
  106. package/src/api/controllers/events.controller.ts +10 -10
  107. package/src/api/controllers/health.controller.ts +7 -7
  108. package/src/api/controllers/tasks.controller.ts +41 -41
  109. package/src/api/dto/__tests__/create-task.dto.test.ts +41 -41
  110. package/src/api/dto/__tests__/filter-tasks.dto.test.ts +35 -35
  111. package/src/api/dto/create-task.dto.ts +33 -33
  112. package/src/api/dto/filter-tasks.dto.ts +33 -33
  113. package/src/api/services/__tests__/events.service.test.ts +41 -41
  114. package/src/api/services/__tests__/tasks.service.test.ts +41 -41
  115. package/src/api/services/events.service.ts +17 -17
  116. package/src/api/services/tasks.service.ts +79 -79
  117. package/src/api/sse/events.stream.ts +90 -90
  118. package/src/bootstrap.ts +89 -0
  119. package/src/core/__tests__/core-router.test.ts +30 -30
  120. package/src/core/__tests__/core-server.test.ts +44 -44
  121. package/src/core/__tests__/event.normalizer.test.ts +56 -56
  122. package/src/core/__tests__/event.router.test.ts +89 -89
  123. package/src/core/__tests__/logger.test.ts +32 -32
  124. package/src/core/__tests__/storage-manager.test.ts +74 -74
  125. package/src/core/event.normalizer.ts +147 -147
  126. package/src/core/event.router.ts +13 -13
  127. package/src/core/http/__tests__/adapter-node.test.ts +52 -52
  128. package/src/core/http/__tests__/body-parser-multipart.test.ts +41 -41
  129. package/src/core/http/__tests__/body-parser-raw.test.ts +28 -28
  130. package/src/core/http/__tests__/body-parser-text.test.ts +28 -28
  131. package/src/core/http/__tests__/compile-path.test.ts +39 -39
  132. package/src/core/http/__tests__/middleware-pipeline.test.ts +51 -51
  133. package/src/core/http/__tests__/request.test.ts +34 -34
  134. package/src/core/http/__tests__/response.test.ts +35 -35
  135. package/src/core/http/__tests__/router-match.test.ts +171 -171
  136. package/src/core/http/adapter-node.ts +51 -51
  137. package/src/core/http/buildRequest.ts +18 -18
  138. package/src/core/http/compile-path.ts +32 -32
  139. package/src/core/http/errors.ts +37 -37
  140. package/src/core/http/http-server.ts +52 -52
  141. package/src/core/http/middleware.ts +160 -160
  142. package/src/core/http/request.ts +55 -55
  143. package/src/core/http/response.ts +93 -93
  144. package/src/core/http/router.ts +138 -138
  145. package/src/core/id-generator.ts +8 -8
  146. package/src/core/logger.ts +113 -113
  147. package/src/core/router.ts +44 -44
  148. package/src/core/server.ts +85 -85
  149. package/src/core/storage.ts +64 -64
  150. package/src/index.ts +10 -89
  151. package/src/listeners/api/__tests__/api.controller.test.ts +116 -116
  152. package/src/listeners/api/__tests__/api.extractor.test.ts +46 -46
  153. package/src/listeners/api/__tests__/api.listener.test.ts +82 -82
  154. package/src/listeners/api/__tests__/api.routes.test.ts +155 -155
  155. package/src/listeners/api/__tests__/api.sse.test.ts +105 -105
  156. package/src/listeners/api/api.controllers.ts +67 -67
  157. package/src/listeners/api/api.extractor.ts +43 -43
  158. package/src/listeners/api/api.listener.ts +50 -50
  159. package/src/listeners/api/api.routes.ts +76 -76
  160. package/src/listeners/api/api.sse.ts +38 -38
  161. package/src/listeners/dns/__tests__/dns.test.ts +118 -118
  162. package/src/listeners/dns/dns.extractor.ts +14 -14
  163. package/src/listeners/dns/dns.listener.ts +61 -61
  164. package/src/listeners/http/__tests__/http.extractor.test.ts +59 -59
  165. package/src/listeners/http/__tests__/http.listener.test.ts +133 -133
  166. package/src/listeners/http/http.extractor.ts +15 -15
  167. package/src/listeners/http/http.listener.ts +110 -110
  168. package/src/listeners/listener.interface.ts +4 -4
  169. package/src/listeners/smtp/__tests__/smtp.extractor.test.ts +69 -69
  170. package/src/listeners/smtp/__tests__/smtp.listener.test.ts +150 -150
  171. package/src/listeners/smtp/smtp.extractor.ts +18 -18
  172. package/src/listeners/smtp/smtp.listener.ts +60 -60
  173. package/src/listeners/ssrf/__tests__/ssrf.extractor.test.ts +41 -41
  174. package/src/listeners/ssrf/__tests__/ssrf.listener.test.ts +87 -87
  175. package/src/listeners/ssrf/ssrf.extractor.ts +14 -14
  176. package/src/listeners/ssrf/ssrf.listener.ts +37 -37
  177. package/src/listeners/tcp/tcp.extractor.ts +16 -16
  178. package/src/listeners/tcp/tcp.listener.ts +61 -61
  179. package/src/listeners/webhook/__tests__/webhook.extractor.test.ts +35 -35
  180. package/src/listeners/webhook/__tests__/webhook.listener.test.ts +122 -122
  181. package/src/listeners/webhook/webhook.extractor.ts +12 -12
  182. package/src/listeners/webhook/webhook.listener.ts +58 -58
  183. package/src/listeners/websocket/__tests__/websocket.extractor.test.ts +33 -33
  184. package/src/listeners/websocket/__tests__/websocket.listener.test.ts +90 -90
  185. package/src/listeners/websocket/websocket.extractor.ts +11 -11
  186. package/src/listeners/websocket/websocket.listener.ts +40 -40
  187. package/src/storage-adapters/adapters/__tests__/memory.storage.test.ts +75 -75
  188. package/src/storage-adapters/adapters/memory.storage.ts +64 -64
  189. package/src/storage-adapters/storage.interface.ts +26 -26
  190. package/src/types/event.types.ts +147 -147
  191. package/tsconfig.json +21 -21
@@ -1,40 +1,40 @@
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
+ 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 +1,75 @@
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
+ 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 +1,64 @@
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
- }
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
+ }
@@ -1,26 +1,26 @@
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
+ 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
+ }