@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.
- package/README.md +152 -0
- package/dist/adapters/axios.d.ts +5 -0
- package/dist/adapters/axios.d.ts.map +1 -0
- package/dist/adapters/axios.js +36 -0
- package/dist/adapters/axios.js.map +1 -0
- package/dist/adapters/index.d.ts +3 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/stub.d.ts +22 -0
- package/dist/adapters/stub.d.ts.map +1 -0
- package/dist/adapters/stub.js +36 -0
- package/dist/adapters/stub.js.map +1 -0
- package/dist/events/adapters/in-memory.d.ts +52 -0
- package/dist/events/adapters/in-memory.d.ts.map +1 -0
- package/dist/events/adapters/in-memory.js +70 -0
- package/dist/events/adapters/in-memory.js.map +1 -0
- package/dist/events/adapters/in-memory.test.d.ts +2 -0
- package/dist/events/adapters/in-memory.test.d.ts.map +1 -0
- package/dist/events/adapters/in-memory.test.js +109 -0
- package/dist/events/adapters/in-memory.test.js.map +1 -0
- package/dist/events/adapters/index.d.ts +9 -0
- package/dist/events/adapters/index.d.ts.map +1 -0
- package/dist/events/adapters/index.js +9 -0
- package/dist/events/adapters/index.js.map +1 -0
- package/dist/events/adapters/kinesis.d.ts +91 -0
- package/dist/events/adapters/kinesis.d.ts.map +1 -0
- package/dist/events/adapters/kinesis.js +136 -0
- package/dist/events/adapters/kinesis.js.map +1 -0
- package/dist/events/adapters/kinesis.test.d.ts +2 -0
- package/dist/events/adapters/kinesis.test.d.ts.map +1 -0
- package/dist/events/adapters/kinesis.test.js +249 -0
- package/dist/events/adapters/kinesis.test.js.map +1 -0
- package/dist/events/emitter.d.ts +68 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +83 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/emitter.test.d.ts +2 -0
- package/dist/events/emitter.test.d.ts.map +1 -0
- package/dist/events/emitter.test.js +262 -0
- package/dist/events/emitter.test.js.map +1 -0
- package/dist/events/index.d.ts +4 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +4 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +112 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +9 -0
- package/dist/events/types.js.map +1 -0
- package/dist/executor.d.ts +4 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +799 -0
- package/dist/executor.js.map +1 -0
- package/dist/executor.test.d.ts +2 -0
- package/dist/executor.test.d.ts.map +1 -0
- package/dist/executor.test.js +1584 -0
- package/dist/executor.test.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/secrets/factory.d.ts +121 -0
- package/dist/secrets/factory.d.ts.map +1 -0
- package/dist/secrets/factory.js +137 -0
- package/dist/secrets/factory.js.map +1 -0
- package/dist/secrets/index.d.ts +14 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +18 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/providers/aws.d.ts +63 -0
- package/dist/secrets/providers/aws.d.ts.map +1 -0
- package/dist/secrets/providers/aws.js +110 -0
- package/dist/secrets/providers/aws.js.map +1 -0
- package/dist/secrets/providers/env.d.ts +36 -0
- package/dist/secrets/providers/env.d.ts.map +1 -0
- package/dist/secrets/providers/env.js +37 -0
- package/dist/secrets/providers/env.js.map +1 -0
- package/dist/secrets/providers/index.d.ts +7 -0
- package/dist/secrets/providers/index.d.ts.map +1 -0
- package/dist/secrets/providers/index.js +7 -0
- package/dist/secrets/providers/index.js.map +1 -0
- package/dist/secrets/providers/vault.d.ts +75 -0
- package/dist/secrets/providers/vault.d.ts.map +1 -0
- package/dist/secrets/providers/vault.js +143 -0
- package/dist/secrets/providers/vault.js.map +1 -0
- package/dist/secrets/registry.d.ts +39 -0
- package/dist/secrets/registry.d.ts.map +1 -0
- package/dist/secrets/registry.js +134 -0
- package/dist/secrets/registry.js.map +1 -0
- package/dist/secrets/resolver.d.ts +45 -0
- package/dist/secrets/resolver.d.ts.map +1 -0
- package/dist/secrets/resolver.js +188 -0
- package/dist/secrets/resolver.js.map +1 -0
- package/dist/secrets/secrets.test.d.ts +2 -0
- package/dist/secrets/secrets.test.d.ts.map +1 -0
- package/dist/secrets/secrets.test.js +317 -0
- package/dist/secrets/secrets.test.js.map +1 -0
- package/dist/secrets/types.d.ts +70 -0
- package/dist/secrets/types.d.ts.map +1 -0
- package/dist/secrets/types.js +42 -0
- package/dist/secrets/types.js.map +1 -0
- package/dist/shared.d.ts +8 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +30 -0
- package/dist/shared.js.map +1 -0
- package/dist/test-monitor-types.d.ts +43 -0
- package/dist/test-monitor-types.d.ts.map +1 -0
- package/dist/test-monitor-types.js +2 -0
- package/dist/test-monitor-types.js.map +1 -0
- package/dist/test-plan-types.d.ts +43 -0
- package/dist/test-plan-types.d.ts.map +1 -0
- package/dist/test-plan-types.js +2 -0
- package/dist/test-plan-types.js.map +1 -0
- package/dist/types.d.ts +93 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/dates.d.ts +11 -0
- package/dist/utils/dates.d.ts.map +1 -0
- package/dist/utils/dates.js +13 -0
- package/dist/utils/dates.js.map +1 -0
- package/package.json +39 -0
- package/src/adapters/axios.ts +39 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/stub.ts +47 -0
- package/src/events/adapters/README.md +144 -0
- package/src/events/adapters/in-memory.test.ts +146 -0
- package/src/events/adapters/in-memory.ts +93 -0
- package/src/events/adapters/index.ts +9 -0
- package/src/events/adapters/kinesis.test.ts +323 -0
- package/src/events/adapters/kinesis.ts +211 -0
- package/src/events/emitter.test.ts +327 -0
- package/src/events/emitter.ts +133 -0
- package/src/events/index.ts +3 -0
- package/src/events/types.ts +136 -0
- package/src/executor.test.ts +1732 -0
- package/src/executor.ts +1075 -0
- package/src/index.ts +81 -0
- package/src/secrets/factory.ts +248 -0
- package/src/secrets/index.ts +48 -0
- package/src/secrets/providers/aws.ts +178 -0
- package/src/secrets/providers/env.ts +66 -0
- package/src/secrets/providers/index.ts +15 -0
- package/src/secrets/providers/vault.ts +257 -0
- package/src/secrets/resolver.ts +269 -0
- package/src/secrets/secrets.test.ts +402 -0
- package/src/secrets/types.ts +106 -0
- package/src/shared.ts +46 -0
- package/src/test-monitor-types.ts +49 -0
- package/src/types.ts +114 -0
- package/src/utils/dates.ts +13 -0
- package/tsconfig.json +20 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|