@griffin-app/griffin-executor 0.1.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 (153) hide show
  1. package/README.md +152 -0
  2. package/dist/adapters/axios.d.ts +5 -0
  3. package/dist/adapters/axios.d.ts.map +1 -0
  4. package/dist/adapters/axios.js +36 -0
  5. package/dist/adapters/axios.js.map +1 -0
  6. package/dist/adapters/index.d.ts +3 -0
  7. package/dist/adapters/index.d.ts.map +1 -0
  8. package/dist/adapters/index.js +3 -0
  9. package/dist/adapters/index.js.map +1 -0
  10. package/dist/adapters/stub.d.ts +22 -0
  11. package/dist/adapters/stub.d.ts.map +1 -0
  12. package/dist/adapters/stub.js +36 -0
  13. package/dist/adapters/stub.js.map +1 -0
  14. package/dist/events/adapters/in-memory.d.ts +52 -0
  15. package/dist/events/adapters/in-memory.d.ts.map +1 -0
  16. package/dist/events/adapters/in-memory.js +70 -0
  17. package/dist/events/adapters/in-memory.js.map +1 -0
  18. package/dist/events/adapters/in-memory.test.d.ts +2 -0
  19. package/dist/events/adapters/in-memory.test.d.ts.map +1 -0
  20. package/dist/events/adapters/in-memory.test.js +109 -0
  21. package/dist/events/adapters/in-memory.test.js.map +1 -0
  22. package/dist/events/adapters/index.d.ts +9 -0
  23. package/dist/events/adapters/index.d.ts.map +1 -0
  24. package/dist/events/adapters/index.js +9 -0
  25. package/dist/events/adapters/index.js.map +1 -0
  26. package/dist/events/adapters/kinesis.d.ts +91 -0
  27. package/dist/events/adapters/kinesis.d.ts.map +1 -0
  28. package/dist/events/adapters/kinesis.js +136 -0
  29. package/dist/events/adapters/kinesis.js.map +1 -0
  30. package/dist/events/adapters/kinesis.test.d.ts +2 -0
  31. package/dist/events/adapters/kinesis.test.d.ts.map +1 -0
  32. package/dist/events/adapters/kinesis.test.js +249 -0
  33. package/dist/events/adapters/kinesis.test.js.map +1 -0
  34. package/dist/events/emitter.d.ts +68 -0
  35. package/dist/events/emitter.d.ts.map +1 -0
  36. package/dist/events/emitter.js +83 -0
  37. package/dist/events/emitter.js.map +1 -0
  38. package/dist/events/emitter.test.d.ts +2 -0
  39. package/dist/events/emitter.test.d.ts.map +1 -0
  40. package/dist/events/emitter.test.js +262 -0
  41. package/dist/events/emitter.test.js.map +1 -0
  42. package/dist/events/index.d.ts +4 -0
  43. package/dist/events/index.d.ts.map +1 -0
  44. package/dist/events/index.js +4 -0
  45. package/dist/events/index.js.map +1 -0
  46. package/dist/events/types.d.ts +112 -0
  47. package/dist/events/types.d.ts.map +1 -0
  48. package/dist/events/types.js +9 -0
  49. package/dist/events/types.js.map +1 -0
  50. package/dist/executor.d.ts +4 -0
  51. package/dist/executor.d.ts.map +1 -0
  52. package/dist/executor.js +799 -0
  53. package/dist/executor.js.map +1 -0
  54. package/dist/executor.test.d.ts +2 -0
  55. package/dist/executor.test.d.ts.map +1 -0
  56. package/dist/executor.test.js +1584 -0
  57. package/dist/executor.test.js.map +1 -0
  58. package/dist/index.d.ts +9 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +15 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/secrets/factory.d.ts +121 -0
  63. package/dist/secrets/factory.d.ts.map +1 -0
  64. package/dist/secrets/factory.js +137 -0
  65. package/dist/secrets/factory.js.map +1 -0
  66. package/dist/secrets/index.d.ts +14 -0
  67. package/dist/secrets/index.d.ts.map +1 -0
  68. package/dist/secrets/index.js +18 -0
  69. package/dist/secrets/index.js.map +1 -0
  70. package/dist/secrets/providers/aws.d.ts +63 -0
  71. package/dist/secrets/providers/aws.d.ts.map +1 -0
  72. package/dist/secrets/providers/aws.js +110 -0
  73. package/dist/secrets/providers/aws.js.map +1 -0
  74. package/dist/secrets/providers/env.d.ts +36 -0
  75. package/dist/secrets/providers/env.d.ts.map +1 -0
  76. package/dist/secrets/providers/env.js +37 -0
  77. package/dist/secrets/providers/env.js.map +1 -0
  78. package/dist/secrets/providers/index.d.ts +7 -0
  79. package/dist/secrets/providers/index.d.ts.map +1 -0
  80. package/dist/secrets/providers/index.js +7 -0
  81. package/dist/secrets/providers/index.js.map +1 -0
  82. package/dist/secrets/providers/vault.d.ts +75 -0
  83. package/dist/secrets/providers/vault.d.ts.map +1 -0
  84. package/dist/secrets/providers/vault.js +143 -0
  85. package/dist/secrets/providers/vault.js.map +1 -0
  86. package/dist/secrets/registry.d.ts +39 -0
  87. package/dist/secrets/registry.d.ts.map +1 -0
  88. package/dist/secrets/registry.js +134 -0
  89. package/dist/secrets/registry.js.map +1 -0
  90. package/dist/secrets/resolver.d.ts +45 -0
  91. package/dist/secrets/resolver.d.ts.map +1 -0
  92. package/dist/secrets/resolver.js +188 -0
  93. package/dist/secrets/resolver.js.map +1 -0
  94. package/dist/secrets/secrets.test.d.ts +2 -0
  95. package/dist/secrets/secrets.test.d.ts.map +1 -0
  96. package/dist/secrets/secrets.test.js +317 -0
  97. package/dist/secrets/secrets.test.js.map +1 -0
  98. package/dist/secrets/types.d.ts +70 -0
  99. package/dist/secrets/types.d.ts.map +1 -0
  100. package/dist/secrets/types.js +42 -0
  101. package/dist/secrets/types.js.map +1 -0
  102. package/dist/shared.d.ts +8 -0
  103. package/dist/shared.d.ts.map +1 -0
  104. package/dist/shared.js +30 -0
  105. package/dist/shared.js.map +1 -0
  106. package/dist/test-monitor-types.d.ts +43 -0
  107. package/dist/test-monitor-types.d.ts.map +1 -0
  108. package/dist/test-monitor-types.js +2 -0
  109. package/dist/test-monitor-types.js.map +1 -0
  110. package/dist/test-plan-types.d.ts +43 -0
  111. package/dist/test-plan-types.d.ts.map +1 -0
  112. package/dist/test-plan-types.js +2 -0
  113. package/dist/test-plan-types.js.map +1 -0
  114. package/dist/types.d.ts +93 -0
  115. package/dist/types.d.ts.map +1 -0
  116. package/dist/types.js +3 -0
  117. package/dist/types.js.map +1 -0
  118. package/dist/utils/dates.d.ts +11 -0
  119. package/dist/utils/dates.d.ts.map +1 -0
  120. package/dist/utils/dates.js +13 -0
  121. package/dist/utils/dates.js.map +1 -0
  122. package/package.json +39 -0
  123. package/src/adapters/axios.ts +39 -0
  124. package/src/adapters/index.ts +2 -0
  125. package/src/adapters/stub.ts +47 -0
  126. package/src/events/adapters/README.md +144 -0
  127. package/src/events/adapters/in-memory.test.ts +146 -0
  128. package/src/events/adapters/in-memory.ts +93 -0
  129. package/src/events/adapters/index.ts +9 -0
  130. package/src/events/adapters/kinesis.test.ts +323 -0
  131. package/src/events/adapters/kinesis.ts +211 -0
  132. package/src/events/emitter.test.ts +327 -0
  133. package/src/events/emitter.ts +133 -0
  134. package/src/events/index.ts +3 -0
  135. package/src/events/types.ts +136 -0
  136. package/src/executor.test.ts +1732 -0
  137. package/src/executor.ts +1075 -0
  138. package/src/index.ts +81 -0
  139. package/src/secrets/factory.ts +248 -0
  140. package/src/secrets/index.ts +48 -0
  141. package/src/secrets/providers/aws.ts +178 -0
  142. package/src/secrets/providers/env.ts +66 -0
  143. package/src/secrets/providers/index.ts +15 -0
  144. package/src/secrets/providers/vault.ts +257 -0
  145. package/src/secrets/resolver.ts +269 -0
  146. package/src/secrets/secrets.test.ts +402 -0
  147. package/src/secrets/types.ts +106 -0
  148. package/src/shared.ts +46 -0
  149. package/src/test-monitor-types.ts +49 -0
  150. package/src/types.ts +114 -0
  151. package/src/utils/dates.ts +13 -0
  152. package/tsconfig.json +20 -0
  153. package/vitest.config.ts +14 -0
package/README.md ADDED
@@ -0,0 +1,152 @@
1
+ # griffin Monitor Executor
2
+
3
+ The griffin Monitor Executor takes JSON test monitors (output from the test system DSL) and executes them. It can run tests locally or remotely (e.g., in a Lambda function).
4
+
5
+ ## Features
6
+
7
+ ✅ **Currently Working**:
8
+
9
+ - Execute JSON test monitors
10
+ - Support for HTTP endpoints (GET, POST, PUT, DELETE, PATCH)
11
+ - Support for wait nodes
12
+ - Graph-based execution following edges (topological sort)
13
+ - Secrets resolution at runtime (env, AWS Secrets Manager, HashiCorp Vault)
14
+ - Local execution mode
15
+ - Detailed error reporting with node-by-node results
16
+
17
+ 🚧 **In Development**:
18
+
19
+ - Assertion evaluation (structure in place)
20
+ - Remote execution mode
21
+ - Advanced error handling and retries
22
+
23
+ ## Installation
24
+
25
+ ```bash
26
+ npm install
27
+ npm run build
28
+ ```
29
+
30
+ ## Usage
31
+
32
+ ### Programmatic Usage
33
+
34
+ ```typescript
35
+ import { executeMonitor } from "./dist/executor";
36
+ import type { TestMonitor } from "./dist/test-monitor-types";
37
+
38
+ const testMonitor: TestMonitor = {
39
+ name: "my-test",
40
+ endpoint_host: "http://localhost",
41
+ nodes: [
42
+ {
43
+ id: "health",
44
+ type: "endpoint",
45
+ method: "GET",
46
+ path: "/health",
47
+ response_format: "JSON",
48
+ },
49
+ ],
50
+ edges: [
51
+ { from: "__START__", to: "health" },
52
+ { from: "health", to: "__END__" },
53
+ ],
54
+ };
55
+
56
+ const results = await executeMonitor(testMonitor, {
57
+ mode: "local",
58
+ baseUrl: "http://localhost:3000",
59
+ timeout: 30000,
60
+ secretRegistry: secretRegistry, // Optional: for resolving secrets in test monitors
61
+ });
62
+
63
+ console.log(results);
64
+ // {
65
+ // success: true,
66
+ // results: [
67
+ // {
68
+ // nodeId: "health",
69
+ // success: true,
70
+ // response: { status: "ok" },
71
+ // duration_ms: 25
72
+ // }
73
+ // ],
74
+ // errors: [],
75
+ // totalDuration_ms: 25
76
+ // }
77
+ ```
78
+
79
+ ### Execution Options
80
+
81
+ ```typescript
82
+ interface ExecutionOptions {
83
+ mode: "local" | "remote"; // Currently only 'local' is fully supported
84
+ baseUrl?: string; // Base URL for endpoints (overrides monitor's endpoint_host)
85
+ timeout?: number; // Request timeout in ms (default: 30000)
86
+ secretRegistry?: SecretProviderRegistry; // Optional: for resolving secrets in test monitors
87
+ }
88
+ ```
89
+
90
+ ## Execution Flow
91
+
92
+ 1. **Parse the test monitor JSON** - Validates structure and types
93
+ 2. **Build execution graph** - Performs topological sort starting from `__START__`
94
+ 3. **Execute nodes in order**:
95
+ - **Endpoints**: Makes HTTP requests, stores responses
96
+ - **Waits**: Sleeps for specified duration
97
+ - **Assertions**: Evaluates assertions (currently structure only)
98
+ 4. **Collect results** - Aggregates success/failure status for each node
99
+ 5. **Return execution results** - Includes detailed node results, errors, and timing
100
+
101
+ ## Node Types
102
+
103
+ ### HttpRequest Nodes
104
+
105
+ - Makes HTTP requests using axios
106
+ - Supports all HTTP methods (GET, POST, PUT, DELETE, PATCH)
107
+ - Parses JSON, XML, or TEXT responses
108
+ - Stores response for use in subsequent nodes
109
+
110
+ ### Wait Nodes
111
+
112
+ - Pauses execution for specified duration
113
+ - Duration specified in milliseconds
114
+
115
+ ### Assertion Nodes
116
+
117
+ - Currently structure is in place but evaluation needs implementation
118
+ - Will evaluate assertions with access to all previous endpoint responses
119
+
120
+ ### Secrets Resolution
121
+
122
+ If a test monitor contains secret references (created using the `secret()` function in the DSL), they are resolved before execution begins. Secrets can be used in endpoint headers and request bodies.
123
+
124
+ **Supported Providers:**
125
+
126
+ - **Environment Variables**: Read from process environment
127
+ - **AWS Secrets Manager**: Retrieve secrets from AWS Secrets Manager
128
+ - **HashiCorp Vault**: Retrieve secrets from Vault KV secrets engine
129
+
130
+ **Example test monitor with secrets:**
131
+
132
+ ```json
133
+ {
134
+ "name": "authenticated-check",
135
+ "nodes": [
136
+ {
137
+ "id": "api_call",
138
+ "type": "endpoint",
139
+ "headers": {
140
+ "Authorization": {
141
+ "$secret": {
142
+ "provider": "env",
143
+ "ref": "API_TOKEN"
144
+ }
145
+ }
146
+ }
147
+ }
148
+ ]
149
+ }
150
+ ```
151
+
152
+ The executor will resolve all secrets before executing the monitor. If any secret cannot be resolved, execution fails immediately with a clear error message.
@@ -0,0 +1,5 @@
1
+ import type { HttpClientAdapter, HttpRequest, HttpResponse } from "../types.js";
2
+ export declare class AxiosAdapter implements HttpClientAdapter {
3
+ request(req: HttpRequest): Promise<HttpResponse>;
4
+ }
5
+ //# sourceMappingURL=axios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios.d.ts","sourceRoot":"","sources":["../../src/adapters/axios.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhF,qBAAa,YAAa,YAAW,iBAAiB;IAC9C,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAkCvD"}
@@ -0,0 +1,36 @@
1
+ import axios from "axios";
2
+ export class AxiosAdapter {
3
+ async request(req) {
4
+ try {
5
+ const response = await axios({
6
+ method: req.method,
7
+ url: req.url,
8
+ headers: req.headers,
9
+ data: req.body,
10
+ timeout: req.timeout,
11
+ // Accept all status codes - let assertions determine success/failure
12
+ validateStatus: () => true,
13
+ });
14
+ return {
15
+ status: response.status,
16
+ statusText: response.statusText,
17
+ data: response.data,
18
+ headers: response.headers,
19
+ };
20
+ }
21
+ catch (error) {
22
+ // Only throw for actual network/connection errors, not status codes
23
+ if (axios.isAxiosError(error)) {
24
+ if (error.code === "ECONNREFUSED") {
25
+ throw new Error(`Connection refused - is the server running on ${req.url}?`);
26
+ }
27
+ if (error.code === "ETIMEDOUT") {
28
+ throw new Error(`Request timed out after ${req.timeout}ms`);
29
+ }
30
+ // Note: error.response will no longer occur due to validateStatus
31
+ }
32
+ throw error;
33
+ }
34
+ }
35
+ }
36
+ //# sourceMappingURL=axios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios.js","sourceRoot":"","sources":["../../src/adapters/axios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,OAAO,CAAC,GAAgB;QAC5B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC;gBAC3B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,qEAAqE;gBACrE,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;aAC3B,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAiC;aACpD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,oEAAoE;YACpE,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAClC,MAAM,IAAI,KAAK,CACb,iDAAiD,GAAG,CAAC,GAAG,GAAG,CAC5D,CAAC;gBACJ,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;gBAC9D,CAAC;gBACD,kEAAkE;YACpE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export { AxiosAdapter } from "./axios.js";
2
+ export { StubAdapter, type StubResponse } from "./stub.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { AxiosAdapter } from "./axios.js";
2
+ export { StubAdapter } from "./stub.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAqB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { HttpClientAdapter, HttpRequest, HttpResponse } from "../types.js";
2
+ export interface StubResponse {
3
+ /** URL pattern to match (string for exact, RegExp for pattern, or function for custom logic) */
4
+ match: string | RegExp | ((req: HttpRequest) => boolean);
5
+ response: HttpResponse;
6
+ }
7
+ export declare class StubAdapter implements HttpClientAdapter {
8
+ private stubs;
9
+ /**
10
+ * Add a stub response for matching requests
11
+ * @param stub - The stub configuration
12
+ * @returns this (for chaining)
13
+ */
14
+ addStub(stub: StubResponse): this;
15
+ /**
16
+ * Clear all configured stubs
17
+ */
18
+ clearStubs(): void;
19
+ request(req: HttpRequest): Promise<HttpResponse>;
20
+ private matches;
21
+ }
22
+ //# sourceMappingURL=stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub.d.ts","sourceRoot":"","sources":["../../src/adapters/stub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhF,MAAM,WAAW,YAAY;IAC3B,gGAAgG;IAChG,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC;IACzD,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,qBAAa,WAAY,YAAW,iBAAiB;IACnD,OAAO,CAAC,KAAK,CAAsB;IAEnC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKjC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIZ,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAStD,OAAO,CAAC,OAAO;CAShB"}
@@ -0,0 +1,36 @@
1
+ export class StubAdapter {
2
+ stubs = [];
3
+ /**
4
+ * Add a stub response for matching requests
5
+ * @param stub - The stub configuration
6
+ * @returns this (for chaining)
7
+ */
8
+ addStub(stub) {
9
+ this.stubs.push(stub);
10
+ return this;
11
+ }
12
+ /**
13
+ * Clear all configured stubs
14
+ */
15
+ clearStubs() {
16
+ this.stubs = [];
17
+ }
18
+ async request(req) {
19
+ for (const stub of this.stubs) {
20
+ if (this.matches(stub.match, req)) {
21
+ return stub.response;
22
+ }
23
+ }
24
+ throw new Error(`No stub matched request: ${req.method} ${req.url}`);
25
+ }
26
+ matches(match, req) {
27
+ if (typeof match === "string") {
28
+ return req.url === match;
29
+ }
30
+ if (match instanceof RegExp) {
31
+ return match.test(req.url);
32
+ }
33
+ return match(req);
34
+ }
35
+ }
36
+ //# sourceMappingURL=stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub.js","sourceRoot":"","sources":["../../src/adapters/stub.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,WAAW;IACd,KAAK,GAAmB,EAAE,CAAC;IAEnC;;;;OAIG;IACH,OAAO,CAAC,IAAkB;QACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAgB;QAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,QAAQ,CAAC;YACvB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACvE,CAAC;IAEO,OAAO,CAAC,KAA4B,EAAE,GAAgB;QAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * In-memory event bus adapter for testing and local development.
3
+ *
4
+ * Stores events in memory and provides access for inspection.
5
+ * Useful for testing the DurableEventEmitter batching behavior without
6
+ * requiring actual infrastructure.
7
+ */
8
+ import type { DurableEventBusAdapter } from "../emitter.js";
9
+ import type { ExecutionEvent } from "../types.js";
10
+ /**
11
+ * In-memory adapter that stores events for inspection.
12
+ *
13
+ * Primarily useful for testing and development.
14
+ * Can simulate failures and latency.
15
+ */
16
+ export declare class InMemoryAdapter implements DurableEventBusAdapter {
17
+ private options;
18
+ private readonly events;
19
+ private publishCount;
20
+ constructor(options?: {
21
+ /** Simulate latency in milliseconds */
22
+ latencyMs?: number;
23
+ /** Probability of failure (0-1) for testing error handling */
24
+ failureProbability?: number;
25
+ });
26
+ publish(events: ExecutionEvent[]): Promise<void>;
27
+ /**
28
+ * Get all published events.
29
+ */
30
+ getEvents(): ExecutionEvent[];
31
+ /**
32
+ * Get events by type.
33
+ */
34
+ getEventsByType<T extends ExecutionEvent["type"]>(type: T): Array<Extract<ExecutionEvent, {
35
+ type: T;
36
+ }>>;
37
+ /**
38
+ * Get events for a specific execution.
39
+ */
40
+ getEventsForExecution(executionId: string): ExecutionEvent[];
41
+ /**
42
+ * Get the number of times publish() was called.
43
+ * Useful for verifying batching behavior.
44
+ */
45
+ getPublishCount(): number;
46
+ /**
47
+ * Clear all stored events.
48
+ */
49
+ clear(): void;
50
+ private sleep;
51
+ }
52
+ //# sourceMappingURL=in-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/events/adapters/in-memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,sBAAsB;IAK1D,OAAO,CAAC,OAAO;IAJjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,YAAY,CAAK;gBAGf,OAAO,GAAE;QACf,uCAAuC;QACvC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,8DAA8D;QAC9D,kBAAkB,CAAC,EAAE,MAAM,CAAC;KACxB;IAGF,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBtD;;OAEG;IACH,SAAS,IAAI,cAAc,EAAE;IAI7B;;OAEG;IACH,eAAe,CAAC,CAAC,SAAS,cAAc,CAAC,MAAM,CAAC,EAC9C,IAAI,EAAE,CAAC,GACN,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAM9C;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,EAAE;IAI5D;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * In-memory event bus adapter for testing and local development.
3
+ *
4
+ * Stores events in memory and provides access for inspection.
5
+ * Useful for testing the DurableEventEmitter batching behavior without
6
+ * requiring actual infrastructure.
7
+ */
8
+ /**
9
+ * In-memory adapter that stores events for inspection.
10
+ *
11
+ * Primarily useful for testing and development.
12
+ * Can simulate failures and latency.
13
+ */
14
+ export class InMemoryAdapter {
15
+ options;
16
+ events = [];
17
+ publishCount = 0;
18
+ constructor(options = {}) {
19
+ this.options = options;
20
+ }
21
+ async publish(events) {
22
+ // Simulate latency
23
+ if (this.options.latencyMs) {
24
+ await this.sleep(this.options.latencyMs);
25
+ }
26
+ // Simulate failures
27
+ if (this.options.failureProbability &&
28
+ Math.random() < this.options.failureProbability) {
29
+ throw new Error("Simulated publish failure");
30
+ }
31
+ this.events.push(...events);
32
+ this.publishCount++;
33
+ }
34
+ /**
35
+ * Get all published events.
36
+ */
37
+ getEvents() {
38
+ return [...this.events];
39
+ }
40
+ /**
41
+ * Get events by type.
42
+ */
43
+ getEventsByType(type) {
44
+ return this.events.filter((e) => e.type === type);
45
+ }
46
+ /**
47
+ * Get events for a specific execution.
48
+ */
49
+ getEventsForExecution(executionId) {
50
+ return this.events.filter((e) => e.execution_id === executionId);
51
+ }
52
+ /**
53
+ * Get the number of times publish() was called.
54
+ * Useful for verifying batching behavior.
55
+ */
56
+ getPublishCount() {
57
+ return this.publishCount;
58
+ }
59
+ /**
60
+ * Clear all stored events.
61
+ */
62
+ clear() {
63
+ this.events.length = 0;
64
+ this.publishCount = 0;
65
+ }
66
+ sleep(ms) {
67
+ return new Promise((resolve) => setTimeout(resolve, ms));
68
+ }
69
+ }
70
+ //# sourceMappingURL=in-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory.js","sourceRoot":"","sources":["../../../src/events/adapters/in-memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAKhB;IAJO,MAAM,GAAqB,EAAE,CAAC;IACvC,YAAY,GAAG,CAAC,CAAC;IAEzB,YACU,UAKJ,EAAE;QALE,YAAO,GAAP,OAAO,CAKT;IACL,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,mBAAmB;QACnB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QAED,oBAAoB;QACpB,IACE,IAAI,CAAC,OAAO,CAAC,kBAAkB;YAC/B,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAC/C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,eAAe,CACb,IAAO;QAEP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAE/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,WAAmB;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,WAAW,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=in-memory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory.test.d.ts","sourceRoot":"","sources":["../../../src/events/adapters/in-memory.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ import { describe, it, expect, beforeEach } from "vitest";
2
+ import { InMemoryAdapter } from "./in-memory.js";
3
+ describe("InMemoryAdapter", () => {
4
+ let adapter;
5
+ beforeEach(() => {
6
+ adapter = new InMemoryAdapter();
7
+ });
8
+ const createMockEvent = (type, executionId, seq) => ({
9
+ type,
10
+ event_id: `event-${seq}`,
11
+ seq,
12
+ timestamp: Date.now(),
13
+ monitor_id: "monitor-1",
14
+ execution_id: executionId,
15
+ organization_id: "org-1",
16
+ monitor_name: "Test Monitor",
17
+ monitor_version: "1.0.0",
18
+ node_count: 1,
19
+ edge_count: 1,
20
+ });
21
+ describe("publish", () => {
22
+ it("should store events", async () => {
23
+ const events = [
24
+ createMockEvent("MONITOR_START", "exec-1", 0),
25
+ createMockEvent("MONITOR_END", "exec-1", 1),
26
+ ];
27
+ await adapter.publish(events);
28
+ const stored = adapter.getEvents();
29
+ expect(stored).toHaveLength(2);
30
+ expect(stored[0].type).toBe("MONITOR_START");
31
+ expect(stored[1].type).toBe("MONITOR_END");
32
+ });
33
+ it("should track publish count", async () => {
34
+ await adapter.publish([createMockEvent("MONITOR_START", "exec-1", 0)]);
35
+ await adapter.publish([createMockEvent("MONITOR_END", "exec-1", 1)]);
36
+ expect(adapter.getPublishCount()).toBe(2);
37
+ });
38
+ it("should append events across multiple publishes", async () => {
39
+ await adapter.publish([createMockEvent("MONITOR_START", "exec-1", 0)]);
40
+ await adapter.publish([createMockEvent("MONITOR_END", "exec-1", 1)]);
41
+ const events = adapter.getEvents();
42
+ expect(events).toHaveLength(2);
43
+ });
44
+ });
45
+ describe("getEventsByType", () => {
46
+ it("should filter events by type", async () => {
47
+ const events = [
48
+ createMockEvent("MONITOR_START", "exec-1", 0),
49
+ createMockEvent("MONITOR_END", "exec-1", 1),
50
+ createMockEvent("MONITOR_START", "exec-2", 2),
51
+ ];
52
+ await adapter.publish(events);
53
+ const planStartEvents = adapter.getEventsByType("MONITOR_START");
54
+ expect(planStartEvents).toHaveLength(2);
55
+ expect(planStartEvents.every((e) => e.type === "MONITOR_START")).toBe(true);
56
+ });
57
+ });
58
+ describe("getEventsForExecution", () => {
59
+ it("should filter events by executionId", async () => {
60
+ const events = [
61
+ createMockEvent("MONITOR_START", "exec-1", 0),
62
+ createMockEvent("MONITOR_END", "exec-1", 1),
63
+ createMockEvent("MONITOR_START", "exec-2", 2),
64
+ ];
65
+ await adapter.publish(events);
66
+ const exec1Events = adapter.getEventsForExecution("exec-1");
67
+ expect(exec1Events).toHaveLength(2);
68
+ expect(exec1Events.every((e) => e.execution_id === "exec-1")).toBe(true);
69
+ });
70
+ });
71
+ describe("clear", () => {
72
+ it("should clear all events and reset counters", async () => {
73
+ await adapter.publish([createMockEvent("MONITOR_START", "exec-1", 0)]);
74
+ adapter.clear();
75
+ expect(adapter.getEvents()).toHaveLength(0);
76
+ expect(adapter.getPublishCount()).toBe(0);
77
+ });
78
+ });
79
+ describe.skip("latency simulation", () => {
80
+ it("should simulate latency", async () => {
81
+ const adapterWithLatency = new InMemoryAdapter({ latencyMs: 50 });
82
+ const start = Date.now();
83
+ await adapterWithLatency.publish([
84
+ createMockEvent("MONITOR_START", "exec-1", 0),
85
+ ]);
86
+ const duration = Date.now() - start;
87
+ expect(duration).toBeGreaterThanOrEqual(50);
88
+ });
89
+ });
90
+ describe("failure simulation", () => {
91
+ it("should simulate failures", async () => {
92
+ const adapterWithFailures = new InMemoryAdapter({
93
+ failureProbability: 1.0, // Always fail
94
+ });
95
+ await expect(adapterWithFailures.publish([
96
+ createMockEvent("MONITOR_START", "exec-1", 0),
97
+ ])).rejects.toThrow("Simulated publish failure");
98
+ });
99
+ it("should succeed when failure probability is 0", async () => {
100
+ const adapterNoFailures = new InMemoryAdapter({
101
+ failureProbability: 0.0,
102
+ });
103
+ await expect(adapterNoFailures.publish([
104
+ createMockEvent("MONITOR_START", "exec-1", 0),
105
+ ])).resolves.not.toThrow();
106
+ });
107
+ });
108
+ });
109
+ //# sourceMappingURL=in-memory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory.test.js","sourceRoot":"","sources":["../../../src/events/adapters/in-memory.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Event bus adapters for durable event publishing.
3
+ *
4
+ * These adapters implement the DurableEventBusAdapter interface
5
+ * and can be used with the DurableEventEmitter for batched event publishing.
6
+ */
7
+ export * from "./kinesis.js";
8
+ export * from "./in-memory.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/events/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Event bus adapters for durable event publishing.
3
+ *
4
+ * These adapters implement the DurableEventBusAdapter interface
5
+ * and can be used with the DurableEventEmitter for batched event publishing.
6
+ */
7
+ export * from "./kinesis.js";
8
+ export * from "./in-memory.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/events/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}