@griffin-app/griffin-plan-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 (114) 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/emitter.d.ts +68 -0
  15. package/dist/events/emitter.d.ts.map +1 -0
  16. package/dist/events/emitter.js +83 -0
  17. package/dist/events/emitter.js.map +1 -0
  18. package/dist/events/emitter.test.d.ts +2 -0
  19. package/dist/events/emitter.test.d.ts.map +1 -0
  20. package/dist/events/emitter.test.js +251 -0
  21. package/dist/events/emitter.test.js.map +1 -0
  22. package/dist/events/index.d.ts +3 -0
  23. package/dist/events/index.d.ts.map +1 -0
  24. package/dist/events/index.js +3 -0
  25. package/dist/events/index.js.map +1 -0
  26. package/dist/events/types.d.ts +109 -0
  27. package/dist/events/types.d.ts.map +1 -0
  28. package/dist/events/types.js +9 -0
  29. package/dist/events/types.js.map +1 -0
  30. package/dist/executor.d.ts +4 -0
  31. package/dist/executor.d.ts.map +1 -0
  32. package/dist/executor.js +732 -0
  33. package/dist/executor.js.map +1 -0
  34. package/dist/executor.test.d.ts +2 -0
  35. package/dist/executor.test.d.ts.map +1 -0
  36. package/dist/executor.test.js +1524 -0
  37. package/dist/executor.test.js.map +1 -0
  38. package/dist/index.d.ts +8 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +12 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/secrets/index.d.ts +14 -0
  43. package/dist/secrets/index.d.ts.map +1 -0
  44. package/dist/secrets/index.js +18 -0
  45. package/dist/secrets/index.js.map +1 -0
  46. package/dist/secrets/providers/aws.d.ts +63 -0
  47. package/dist/secrets/providers/aws.d.ts.map +1 -0
  48. package/dist/secrets/providers/aws.js +111 -0
  49. package/dist/secrets/providers/aws.js.map +1 -0
  50. package/dist/secrets/providers/env.d.ts +36 -0
  51. package/dist/secrets/providers/env.d.ts.map +1 -0
  52. package/dist/secrets/providers/env.js +37 -0
  53. package/dist/secrets/providers/env.js.map +1 -0
  54. package/dist/secrets/providers/index.d.ts +7 -0
  55. package/dist/secrets/providers/index.d.ts.map +1 -0
  56. package/dist/secrets/providers/index.js +7 -0
  57. package/dist/secrets/providers/index.js.map +1 -0
  58. package/dist/secrets/providers/vault.d.ts +75 -0
  59. package/dist/secrets/providers/vault.d.ts.map +1 -0
  60. package/dist/secrets/providers/vault.js +143 -0
  61. package/dist/secrets/providers/vault.js.map +1 -0
  62. package/dist/secrets/registry.d.ts +61 -0
  63. package/dist/secrets/registry.d.ts.map +1 -0
  64. package/dist/secrets/registry.js +182 -0
  65. package/dist/secrets/registry.js.map +1 -0
  66. package/dist/secrets/resolver.d.ts +40 -0
  67. package/dist/secrets/resolver.d.ts.map +1 -0
  68. package/dist/secrets/resolver.js +178 -0
  69. package/dist/secrets/resolver.js.map +1 -0
  70. package/dist/secrets/secrets.test.d.ts +2 -0
  71. package/dist/secrets/secrets.test.d.ts.map +1 -0
  72. package/dist/secrets/secrets.test.js +243 -0
  73. package/dist/secrets/secrets.test.js.map +1 -0
  74. package/dist/secrets/types.d.ts +71 -0
  75. package/dist/secrets/types.d.ts.map +1 -0
  76. package/dist/secrets/types.js +38 -0
  77. package/dist/secrets/types.js.map +1 -0
  78. package/dist/shared.d.ts +8 -0
  79. package/dist/shared.d.ts.map +1 -0
  80. package/dist/shared.js +30 -0
  81. package/dist/shared.js.map +1 -0
  82. package/dist/test-plan-types.d.ts +43 -0
  83. package/dist/test-plan-types.d.ts.map +1 -0
  84. package/dist/test-plan-types.js +2 -0
  85. package/dist/test-plan-types.js.map +1 -0
  86. package/dist/types.d.ts +77 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +3 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +35 -0
  91. package/src/adapters/axios.ts +41 -0
  92. package/src/adapters/index.ts +2 -0
  93. package/src/adapters/stub.ts +47 -0
  94. package/src/events/emitter.test.ts +316 -0
  95. package/src/events/emitter.ts +133 -0
  96. package/src/events/index.ts +2 -0
  97. package/src/events/types.ts +132 -0
  98. package/src/executor.test.ts +1674 -0
  99. package/src/executor.ts +986 -0
  100. package/src/index.ts +69 -0
  101. package/src/secrets/index.ts +41 -0
  102. package/src/secrets/providers/aws.ts +179 -0
  103. package/src/secrets/providers/env.ts +66 -0
  104. package/src/secrets/providers/index.ts +15 -0
  105. package/src/secrets/providers/vault.ts +257 -0
  106. package/src/secrets/registry.ts +234 -0
  107. package/src/secrets/resolver.ts +249 -0
  108. package/src/secrets/secrets.test.ts +318 -0
  109. package/src/secrets/types.ts +105 -0
  110. package/src/shared.ts +46 -0
  111. package/src/test-plan-types.ts +49 -0
  112. package/src/types.ts +95 -0
  113. package/tsconfig.json +20 -0
  114. package/vitest.config.ts +14 -0
@@ -0,0 +1,251 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import { LocalEventEmitter, DurableEventEmitter, } from "./emitter.js";
3
+ describe("LocalEventEmitter", () => {
4
+ let emitter;
5
+ beforeEach(() => {
6
+ emitter = new LocalEventEmitter();
7
+ });
8
+ it("should deliver events to subscribers synchronously", () => {
9
+ const events = [];
10
+ emitter.subscribe((event) => events.push(event));
11
+ const testEvent = {
12
+ type: "PLAN_START",
13
+ eventId: "123",
14
+ seq: 0,
15
+ timestamp: Date.now(),
16
+ planId: "plan-1",
17
+ executionId: "exec-1",
18
+ planName: "Test Plan",
19
+ planVersion: "1.0",
20
+ nodeCount: 2,
21
+ edgeCount: 1,
22
+ };
23
+ emitter.emit(testEvent);
24
+ expect(events).toHaveLength(1);
25
+ expect(events[0]).toEqual(testEvent);
26
+ });
27
+ it("should deliver events to multiple subscribers", () => {
28
+ const events1 = [];
29
+ const events2 = [];
30
+ emitter.subscribe((event) => events1.push(event));
31
+ emitter.subscribe((event) => events2.push(event));
32
+ const testEvent = {
33
+ type: "NODE_START",
34
+ eventId: "456",
35
+ seq: 1,
36
+ timestamp: Date.now(),
37
+ planId: "plan-1",
38
+ executionId: "exec-1",
39
+ nodeId: "node-1",
40
+ nodeType: "endpoint",
41
+ };
42
+ emitter.emit(testEvent);
43
+ expect(events1).toHaveLength(1);
44
+ expect(events2).toHaveLength(1);
45
+ expect(events1[0]).toEqual(testEvent);
46
+ expect(events2[0]).toEqual(testEvent);
47
+ });
48
+ it("should allow unsubscribing", () => {
49
+ const events = [];
50
+ const unsubscribe = emitter.subscribe((event) => events.push(event));
51
+ const testEvent = {
52
+ type: "NODE_END",
53
+ eventId: "789",
54
+ seq: 2,
55
+ timestamp: Date.now(),
56
+ planId: "plan-1",
57
+ executionId: "exec-1",
58
+ nodeId: "node-1",
59
+ nodeType: "endpoint",
60
+ success: true,
61
+ duration_ms: 100,
62
+ };
63
+ emitter.emit(testEvent);
64
+ expect(events).toHaveLength(1);
65
+ unsubscribe();
66
+ emitter.emit(testEvent);
67
+ expect(events).toHaveLength(1); // Still 1, not 2
68
+ });
69
+ it("should not propagate listener errors to other listeners", () => {
70
+ const events = [];
71
+ const consoleErrorSpy = vi
72
+ .spyOn(console, "error")
73
+ .mockImplementation(() => { });
74
+ emitter.subscribe(() => {
75
+ throw new Error("Listener error");
76
+ });
77
+ emitter.subscribe((event) => events.push(event));
78
+ const testEvent = {
79
+ type: "PLAN_END",
80
+ eventId: "abc",
81
+ seq: 3,
82
+ timestamp: Date.now(),
83
+ planId: "plan-1",
84
+ executionId: "exec-1",
85
+ success: true,
86
+ totalDuration_ms: 1000,
87
+ nodeResultCount: 2,
88
+ errorCount: 0,
89
+ errors: [],
90
+ };
91
+ emitter.emit(testEvent);
92
+ expect(events).toHaveLength(1);
93
+ expect(consoleErrorSpy).toHaveBeenCalled();
94
+ consoleErrorSpy.mockRestore();
95
+ });
96
+ });
97
+ describe("DurableEventEmitter", () => {
98
+ let adapter;
99
+ let publishSpy;
100
+ let emitter;
101
+ beforeEach(() => {
102
+ publishSpy = vi
103
+ .fn()
104
+ .mockResolvedValue(undefined);
105
+ adapter = { publish: publishSpy };
106
+ });
107
+ afterEach(() => {
108
+ emitter?.destroy();
109
+ });
110
+ it("should batch events and flush on batch size", async () => {
111
+ emitter = new DurableEventEmitter(adapter, {
112
+ batchSize: 3,
113
+ flushIntervalMs: 10000,
114
+ });
115
+ const event1 = {
116
+ type: "NODE_START",
117
+ eventId: "1",
118
+ seq: 0,
119
+ timestamp: Date.now(),
120
+ planId: "plan-1",
121
+ executionId: "exec-1",
122
+ nodeId: "node-1",
123
+ nodeType: "endpoint",
124
+ };
125
+ const event2 = {
126
+ type: "NODE_START",
127
+ eventId: "2",
128
+ seq: 1,
129
+ timestamp: Date.now(),
130
+ planId: "plan-1",
131
+ executionId: "exec-1",
132
+ nodeId: "node-2",
133
+ nodeType: "wait",
134
+ };
135
+ const event3 = {
136
+ type: "NODE_START",
137
+ eventId: "3",
138
+ seq: 2,
139
+ timestamp: Date.now(),
140
+ planId: "plan-1",
141
+ executionId: "exec-1",
142
+ nodeId: "node-3",
143
+ nodeType: "assertion",
144
+ };
145
+ emitter.emit(event1);
146
+ emitter.emit(event2);
147
+ expect(publishSpy).not.toHaveBeenCalled();
148
+ emitter.emit(event3); // Should trigger auto-flush
149
+ // Wait for async flush
150
+ await new Promise((resolve) => setTimeout(resolve, 10));
151
+ expect(publishSpy).toHaveBeenCalledTimes(1);
152
+ expect(publishSpy).toHaveBeenCalledWith([event1, event2, event3]);
153
+ });
154
+ it("should flush on interval", async () => {
155
+ emitter = new DurableEventEmitter(adapter, {
156
+ batchSize: 100,
157
+ flushIntervalMs: 50,
158
+ });
159
+ const event = {
160
+ type: "HTTP_REQUEST",
161
+ eventId: "1",
162
+ seq: 0,
163
+ timestamp: Date.now(),
164
+ planId: "plan-1",
165
+ executionId: "exec-1",
166
+ nodeId: "node-1",
167
+ attempt: 1,
168
+ method: "GET",
169
+ url: "https://api.example.com/test",
170
+ hasBody: false,
171
+ };
172
+ emitter.emit(event);
173
+ // Wait for interval flush
174
+ await new Promise((resolve) => setTimeout(resolve, 100));
175
+ expect(publishSpy).toHaveBeenCalledWith([event]);
176
+ });
177
+ it("should flush manually when requested", async () => {
178
+ emitter = new DurableEventEmitter(adapter, {
179
+ batchSize: 100,
180
+ flushIntervalMs: 10000,
181
+ });
182
+ const event = {
183
+ type: "HTTP_RESPONSE",
184
+ eventId: "1",
185
+ seq: 0,
186
+ timestamp: Date.now(),
187
+ planId: "plan-1",
188
+ executionId: "exec-1",
189
+ nodeId: "node-1",
190
+ attempt: 1,
191
+ status: 200,
192
+ statusText: "OK",
193
+ duration_ms: 100,
194
+ hasBody: true,
195
+ };
196
+ emitter.emit(event);
197
+ await emitter.flush();
198
+ expect(publishSpy).toHaveBeenCalledWith([event]);
199
+ });
200
+ it("should not emit after being destroyed", async () => {
201
+ emitter = new DurableEventEmitter(adapter, {
202
+ batchSize: 100,
203
+ flushIntervalMs: 50,
204
+ });
205
+ const consoleWarnSpy = vi
206
+ .spyOn(console, "warn")
207
+ .mockImplementation(() => { });
208
+ emitter.destroy();
209
+ const event = {
210
+ type: "ERROR",
211
+ eventId: "1",
212
+ seq: 0,
213
+ timestamp: Date.now(),
214
+ planId: "plan-1",
215
+ executionId: "exec-1",
216
+ errorName: "TestError",
217
+ message: "Test error message",
218
+ };
219
+ emitter.emit(event);
220
+ await new Promise((resolve) => setTimeout(resolve, 100));
221
+ expect(publishSpy).not.toHaveBeenCalled();
222
+ expect(consoleWarnSpy).toHaveBeenCalledWith("Cannot emit event: emitter is destroyed");
223
+ consoleWarnSpy.mockRestore();
224
+ });
225
+ it("should handle publish failures gracefully", async () => {
226
+ const consoleErrorSpy = vi
227
+ .spyOn(console, "error")
228
+ .mockImplementation(() => { });
229
+ publishSpy.mockRejectedValueOnce(new Error("Publish failed"));
230
+ emitter = new DurableEventEmitter(adapter, {
231
+ batchSize: 1,
232
+ flushIntervalMs: 10000,
233
+ });
234
+ const event = {
235
+ type: "WAIT_START",
236
+ eventId: "1",
237
+ seq: 0,
238
+ timestamp: Date.now(),
239
+ planId: "plan-1",
240
+ executionId: "exec-1",
241
+ nodeId: "wait-1",
242
+ duration_ms: 1000,
243
+ };
244
+ emitter.emit(event);
245
+ await new Promise((resolve) => setTimeout(resolve, 10));
246
+ expect(publishSpy).toHaveBeenCalled();
247
+ expect(consoleErrorSpy).toHaveBeenCalled();
248
+ consoleErrorSpy.mockRestore();
249
+ });
250
+ });
251
+ //# sourceMappingURL=emitter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.test.js","sourceRoot":"","sources":["../../src/events/emitter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export * from "./emitter.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export * from "./emitter.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Event types for test plan execution.
3
+ *
4
+ * All events are JSON-serializable for compatibility with various event buses.
5
+ * Events include stable identifiers (executionId, eventId) and monotonic sequence
6
+ * numbers for deduplication and ordering.
7
+ */
8
+ /** Base event envelope with correlation and ordering metadata */
9
+ export interface BaseEvent {
10
+ /** Unique identifier for this specific event */
11
+ eventId: string;
12
+ /** Monotonic sequence number within this execution (0-indexed) */
13
+ seq: number;
14
+ /** Unix timestamp in milliseconds */
15
+ timestamp: number;
16
+ /** ID of the test plan being executed */
17
+ planId: string;
18
+ /** Unique identifier for this execution run */
19
+ executionId: string;
20
+ }
21
+ /** Plan-level events */
22
+ export interface PlanStartEvent extends BaseEvent {
23
+ type: "PLAN_START";
24
+ planName: string;
25
+ planVersion: string;
26
+ nodeCount: number;
27
+ edgeCount: number;
28
+ }
29
+ export interface PlanEndEvent extends BaseEvent {
30
+ type: "PLAN_END";
31
+ success: boolean;
32
+ totalDuration_ms: number;
33
+ nodeResultCount: number;
34
+ errorCount: number;
35
+ errors: string[];
36
+ }
37
+ /** Node-level events (domain-enriched from ts-edge events) */
38
+ export interface NodeStartEvent extends BaseEvent {
39
+ type: "NODE_START";
40
+ nodeId: string;
41
+ nodeType: "endpoint" | "wait" | "assertion";
42
+ }
43
+ export interface NodeEndEvent extends BaseEvent {
44
+ type: "NODE_END";
45
+ nodeId: string;
46
+ nodeType: "endpoint" | "wait" | "assertion";
47
+ success: boolean;
48
+ duration_ms: number;
49
+ error?: string;
50
+ }
51
+ /** HTTP-specific events (for endpoint nodes) */
52
+ export interface HttpRequestEvent extends BaseEvent {
53
+ type: "HTTP_REQUEST";
54
+ nodeId: string;
55
+ attempt: number;
56
+ method: string;
57
+ url: string;
58
+ headers?: Record<string, string>;
59
+ hasBody: boolean;
60
+ }
61
+ export interface HttpResponseEvent extends BaseEvent {
62
+ type: "HTTP_RESPONSE";
63
+ nodeId: string;
64
+ attempt: number;
65
+ status: number;
66
+ statusText: string;
67
+ duration_ms: number;
68
+ hasBody: boolean;
69
+ }
70
+ export interface HttpRetryEvent extends BaseEvent {
71
+ type: "HTTP_RETRY";
72
+ nodeId: string;
73
+ attempt: number;
74
+ maxAttempts: number;
75
+ reason: string;
76
+ nextRetryDelayMs?: number;
77
+ }
78
+ /** Assertion events */
79
+ export interface AssertionResultEvent extends BaseEvent {
80
+ type: "ASSERTION_RESULT";
81
+ nodeId: string;
82
+ assertionIndex: number;
83
+ passed: boolean;
84
+ message: string;
85
+ }
86
+ /** Wait events */
87
+ export interface WaitStartEvent extends BaseEvent {
88
+ type: "WAIT_START";
89
+ nodeId: string;
90
+ duration_ms: number;
91
+ }
92
+ /** Streaming/progress events from nodes */
93
+ export interface NodeStreamEvent extends BaseEvent {
94
+ type: "NODE_STREAM";
95
+ nodeId: string;
96
+ chunk: string;
97
+ }
98
+ /** System/executor-level errors (not node failures) */
99
+ export interface ErrorEvent extends BaseEvent {
100
+ type: "ERROR";
101
+ errorName: string;
102
+ message: string;
103
+ context?: string;
104
+ /** Only included in local/development mode */
105
+ stack?: string;
106
+ }
107
+ /** Union type of all execution events */
108
+ export type ExecutionEvent = PlanStartEvent | PlanEndEvent | NodeStartEvent | NodeEndEvent | HttpRequestEvent | HttpResponseEvent | HttpRetryEvent | AssertionResultEvent | WaitStartEvent | NodeStreamEvent | ErrorEvent;
109
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Event types for test plan execution.
3
+ *
4
+ * All events are JSON-serializable for compatibility with various event buses.
5
+ * Events include stable identifiers (executionId, eventId) and monotonic sequence
6
+ * numbers for deduplication and ordering.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,4 @@
1
+ import { TestPlanV1 } from "griffin/types";
2
+ import type { ExecutionOptions, ExecutionResult } from "./types.js";
3
+ export declare function executePlanV1(plan: TestPlanV1, options: ExecutionOptions): Promise<ExecutionResult>;
4
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAOX,MAAM,eAAe,CAAC;AAMvB,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAMhB,MAAM,YAAY,CAAC;AA+UpB,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA2I1B"}