@overkill-dev/simulation 0.0.3 → 0.0.4

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/package.json CHANGED
@@ -15,6 +15,10 @@
15
15
  "./http": {
16
16
  "import": "./packages/simulation/http.entry-point.js",
17
17
  "types": "./packages/simulation/http.entry-point.d.ts"
18
+ },
19
+ "./transcript": {
20
+ "import": "./packages/simulation/transcript.entry-point.js",
21
+ "types": "./packages/simulation/transcript.entry-point.d.ts"
18
22
  }
19
23
  },
20
24
  "homepage": "https://github.com/enormora/overkill#readme",
@@ -29,7 +33,10 @@
29
33
  "type": "git",
30
34
  "url": "git+https://github.com/enormora/overkill.git"
31
35
  },
32
- "sideEffects": false,
36
+ "sideEffects": [
37
+ "./transcript/http-transcript.js",
38
+ "./transcript/transcript-store.js"
39
+ ],
33
40
  "type": "module",
34
- "version": "0.0.3"
41
+ "version": "0.0.4"
35
42
  }
@@ -0,0 +1,18 @@
1
+ import * as httpTranscript from '../../transcript/http-transcript.ts';
2
+ import type { HttpHeadersSnapshot as CoreHttpHeadersSnapshot, HttpInteraction as CoreHttpInteraction, HttpInteractionOutcome as CoreHttpInteractionOutcome, HttpRequestSnapshot as CoreHttpRequestSnapshot, HttpResponseSnapshot as CoreHttpResponseSnapshot, HttpTranscript as CoreHttpTranscript, HttpTranscriptEntry as CoreHttpTranscriptEntry, HttpTranscriptRecorder as CoreHttpTranscriptRecorder, RecordedHttpBody as CoreRecordedHttpBody, RecordedHttpError as CoreRecordedHttpError, TranscriptCaptureErrorEntry as CoreTranscriptCaptureErrorEntry, TranscriptEntry as CoreTranscriptEntry, TranscriptScope as CoreTranscriptScope, TranscriptView as CoreTranscriptView } from '../../transcript/http-transcript.ts';
3
+ export declare const captureErrorHttpTranscript: typeof httpTranscript.captureErrorHttpTranscript, createHttpTranscriptRecorder: typeof httpTranscript.createHttpTranscriptRecorder, emptyTranscriptView: typeof httpTranscript.emptyTranscriptView, httpHeadersSnapshot: typeof httpTranscript.httpHeadersSnapshot, httpTranscriptBodyByteLimit: number, recordedHttpBody: typeof httpTranscript.recordedHttpBody, recordedHttpError: typeof httpTranscript.recordedHttpError;
4
+ export type HttpHeadersSnapshot = CoreHttpHeadersSnapshot;
5
+ export type HttpInteraction<Context> = CoreHttpInteraction<Context>;
6
+ export type HttpInteractionOutcome = CoreHttpInteractionOutcome;
7
+ export type HttpRequestSnapshot = CoreHttpRequestSnapshot;
8
+ export type HttpResponseSnapshot = CoreHttpResponseSnapshot;
9
+ export type HttpTranscript<Context = null> = CoreHttpTranscript<Context>;
10
+ export type HttpTranscriptEntry<Context = null> = CoreHttpTranscriptEntry<Context>;
11
+ export type HttpTranscriptRecorder<Context> = CoreHttpTranscriptRecorder<Context>;
12
+ export type RecordedHttpBody = CoreRecordedHttpBody;
13
+ export type RecordedHttpError = CoreRecordedHttpError;
14
+ export type TranscriptCaptureErrorEntry = CoreTranscriptCaptureErrorEntry;
15
+ export type TranscriptEntry = CoreTranscriptEntry;
16
+ export type TranscriptScope = CoreTranscriptScope;
17
+ export type TranscriptView<Entry extends TranscriptEntry = TranscriptEntry> = CoreTranscriptView<Entry>;
18
+ //# sourceMappingURL=transcript.entry-point.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/simulation/transcript.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EACR,mBAAmB,IAAI,uBAAuB,EAC9C,eAAe,IAAI,mBAAmB,EACtC,sBAAsB,IAAI,0BAA0B,EACpD,mBAAmB,IAAI,uBAAuB,EAC9C,oBAAoB,IAAI,wBAAwB,EAChD,cAAc,IAAI,kBAAkB,EACpC,mBAAmB,IAAI,uBAAuB,EAC9C,sBAAsB,IAAI,0BAA0B,EACpD,gBAAgB,IAAI,oBAAoB,EACxC,iBAAiB,IAAI,qBAAqB,EAC1C,2BAA2B,IAAI,+BAA+B,EAC9D,eAAe,IAAI,mBAAmB,EACtC,eAAe,IAAI,mBAAmB,EACtC,cAAc,IAAI,kBAAkB,EACvC,MAAM,qCAAqC,CAAC;AAE7C,eAAO,MACH,0BAA0B,oDAC1B,4BAA4B,sDAC5B,mBAAmB,6CACnB,mBAAmB,6CACnB,2BAA2B,UAC3B,gBAAgB,0CAChB,iBAAiB,yCACH,CAAC;AAEnB,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAC1D,MAAM,MAAM,eAAe,CAAC,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACpE,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAChE,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAC1D,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC5D,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzE,MAAM,MAAM,mBAAmB,CAAC,OAAO,GAAG,IAAI,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACnF,MAAM,MAAM,sBAAsB,CAAC,OAAO,IAAI,0BAA0B,CAAC,OAAO,CAAC,CAAC;AAClF,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACpD,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AACtD,MAAM,MAAM,2BAA2B,GAAG,+BAA+B,CAAC;AAC1E,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAClD,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,eAAe,GAAG,eAAe,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import * as httpTranscript from "../../transcript/http-transcript.js";
2
+ export const { captureErrorHttpTranscript, createHttpTranscriptRecorder, emptyTranscriptView, httpHeadersSnapshot, httpTranscriptBodyByteLimit, recordedHttpBody, recordedHttpError } = httpTranscript;
3
+ //# sourceMappingURL=transcript.entry-point.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/simulation/transcript.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,qCAAqC,CAAC;AAkBtE,MAAM,CAAC,MAAM,EACT,0BAA0B,EAC1B,4BAA4B,EAC5B,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,iBAAiB,EACpB,GAAG,cAAc,CAAC"}
package/readme.md CHANGED
@@ -21,6 +21,11 @@ Every simulation has a `default` scenario. Scenario descriptors require a
21
21
  `title` and may carry additional typed data for the simulator.
22
22
 
23
23
  Use `@overkill-dev/simulation/http` to launch a simulated HTTP server manually.
24
+ The returned handle exposes a read-only `transcript` with one normalized entry
25
+ per HTTP exchange, including the selected scenario. Request and response bodies
26
+ are captured up to 16 KiB independently.
27
+ Protocol integrations can use `@overkill-dev/simulation/transcript` for the
28
+ shared HTTP transcript recorder, snapshots, and types.
24
29
  Use `createSimulatedHttpServerResource(...)` from `@overkill-dev/resources`
25
30
  when a test runtime should own the server lifecycle. The resource adapter
26
31
  requires an explicit local address request, for example
package/sbom.cdx.json CHANGED
@@ -9,22 +9,22 @@
9
9
  {
10
10
  "type": "application",
11
11
  "name": "packtory",
12
- "version": "0.0.97"
12
+ "version": "0.0.117"
13
13
  }
14
14
  ]
15
15
  },
16
16
  "component": {
17
17
  "type": "library",
18
18
  "name": "@overkill-dev/simulation",
19
- "version": "0.0.3",
20
- "bom-ref": "pkg:npm/@overkill-dev/simulation@0.0.3",
21
- "purl": "pkg:npm/@overkill-dev/simulation@0.0.3"
19
+ "version": "0.0.4",
20
+ "bom-ref": "pkg:npm/@overkill-dev/simulation@0.0.4",
21
+ "purl": "pkg:npm/@overkill-dev/simulation@0.0.4"
22
22
  }
23
23
  },
24
24
  "components": [],
25
25
  "dependencies": [
26
26
  {
27
- "ref": "pkg:npm/@overkill-dev/simulation@0.0.3"
27
+ "ref": "pkg:npm/@overkill-dev/simulation@0.0.4"
28
28
  }
29
29
  ]
30
30
  }
@@ -1,3 +1,4 @@
1
+ import { type HttpTranscript } from '../transcript/http-transcript.ts';
1
2
  import { type SimulatedHttpServerDefinition, type SimulationScenarioCatalog } from './simulation.ts';
2
3
  export type SimulatedHttpServerOptions<Name extends string, Scenarios extends SimulationScenarioCatalog> = {
3
4
  readonly host?: string;
@@ -11,6 +12,9 @@ export type SimulatedHttpServerHandle<Simulation extends SimulationWithScenarios
11
12
  readonly baseUrl: string;
12
13
  readonly dispose: () => Promise<void>;
13
14
  readonly scenarioUrl: (scenario: string & keyof Simulation['scenarios'], path: string) => string;
15
+ readonly transcript: HttpTranscript<{
16
+ readonly scenario: string;
17
+ }>;
14
18
  };
15
19
  type ServerAddress = {
16
20
  readonly port: number;
@@ -32,6 +36,9 @@ type ServerLifecycle = {
32
36
  export type SimulatedHttpListeningServer = {
33
37
  readonly errors: readonly unknown[];
34
38
  readonly server: ServerLifecycle;
39
+ readonly transcript: HttpTranscript<{
40
+ readonly scenario: string;
41
+ }>;
35
42
  };
36
43
  export declare function createSimulatedHttpListeningServer<Scenarios extends SimulationScenarioCatalog>(simulation: SimulatedHttpServerDefinition<string, Scenarios>, host: string): SimulatedHttpListeningServer;
37
44
  export declare function assertNoSimulatedHttpHandlerErrors(handlerErrors: readonly unknown[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"simulated-http-server.d.ts","sourceRoot":"","sources":["../../../../source/simulation/simulated-http-server.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,6BAA6B,EAClC,KAAK,yBAAyB,EACjC,MAAM,iBAAiB,CAAC;AAMzB,MAAM,MAAM,0BAA0B,CAClC,IAAI,SAAS,MAAM,EACnB,SAAS,SAAS,yBAAyB,IAC3C;IACA,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,6BAA6B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;CACvE,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC3B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,UAAU,SAAS,uBAAuB,IAAI,eAAe,GAAG;IAClG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACpG,CAAC;AAMF,KAAK,aAAa,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,CAAC;AAIF,KAAK,eAAe,GAAG;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC;IACtD,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,KAAK,OAAO,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACzD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE;QACV,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;QAC5D,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;KACvD,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACX,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;QAC5D,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;KACvD,CAAC;CACL,CAAC;AAkBF,MAAM,MAAM,4BAA4B,GAAG;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CACpC,CAAC;AAgSF,wBAAgB,kCAAkC,CAAC,SAAS,SAAS,yBAAyB,EAC1F,UAAU,EAAE,6BAA6B,CAAC,MAAM,EAAE,SAAS,CAAC,EAC5D,IAAI,EAAE,MAAM,GACb,4BAA4B,CAQ9B;AAED,wBAAgB,kCAAkC,CAAC,aAAa,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAI1F;AAED,wBAAsB,wBAAwB,CAC1C,KAAK,CAAC,IAAI,SAAS,MAAM,EACzB,KAAK,CAAC,SAAS,SAAS,yBAAyB,EAEjD,OAAO,EAAE,0BAA0B,CAAC,IAAI,EAAE,SAAS,CAAC,GACrD,OAAO,CAAC,yBAAyB,CAAC,6BAA6B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAYpF"}
1
+ {"version":3,"file":"simulated-http-server.d.ts","sourceRoot":"","sources":["../../../../source/simulation/simulated-http-server.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import http, {} from 'node:http';
2
+ import { createHttpTranscriptRecorder, httpHeadersSnapshot, recordedHttpBody, recordedHttpError } from "../transcript/http-transcript.js";
3
+ import { currentTranscriptScope } from "../transcript/transcript-store.js";
2
4
  import { isDefinedSimulatedHttpServer } from "./simulation.js";
3
5
  const scenarioQueryParameterName = '__overkill_scenario';
4
6
  const unknownScenarioStatus = 400;
@@ -102,6 +104,7 @@ async function sendWebResponse(response, webResponse) {
102
104
  const body = await responseBody(webResponse);
103
105
  response.writeHead(webResponse.status, webResponse.statusText, webResponseHeaders(webResponse));
104
106
  response.end(body);
107
+ return body;
105
108
  }
106
109
  function sendTextResponse(response, status, body) {
107
110
  response.writeHead(status);
@@ -129,12 +132,13 @@ function disposalError(error) {
129
132
  function isSimulatedHttpServerHandle(handle) {
130
133
  return Reflect.has(handle, asyncDisposeSymbol());
131
134
  }
132
- function simulatedHttpServerHandle(baseUrl, disposeServer) {
135
+ function simulatedHttpServerHandle(baseUrl, disposeServer, transcript) {
133
136
  const handle = {
134
137
  baseUrl,
135
138
  scenarioUrl(scenario, path) {
136
139
  return scenarioUrl(baseUrl, scenario, path);
137
140
  },
141
+ transcript,
138
142
  dispose: disposeServer
139
143
  };
140
144
  Object.defineProperty(handle, asyncDisposeSymbol(), { value: disposeServer });
@@ -146,39 +150,94 @@ function simulatedHttpServerHandle(baseUrl, disposeServer) {
146
150
  }
147
151
  async function respondToSimulationRequest(response, simulation, request, scenario) {
148
152
  if (!Object.hasOwn(simulation.scenarios, scenario)) {
149
- sendTextResponse(response, unknownScenarioStatus, 'Unknown simulation scenario.');
150
- return;
153
+ const webResponse = new Response('Unknown simulation scenario.', { status: unknownScenarioStatus });
154
+ return { body: await sendWebResponse(response, webResponse), response: webResponse };
151
155
  }
152
156
  const scenarioKey = scenario;
153
157
  const descriptor = simulation.scenarios[scenarioKey];
154
- await sendWebResponse(response, await simulation.handle(request, { descriptor, key: scenarioKey }));
158
+ const webResponse = await simulation.handle(request, { descriptor, key: scenarioKey });
159
+ return { body: await sendWebResponse(response, webResponse), response: webResponse };
160
+ }
161
+ function requestSnapshot(request, body) {
162
+ return Object.freeze({
163
+ body: recordedHttpBody(body),
164
+ headers: httpHeadersSnapshot(request.headers),
165
+ method: request.method,
166
+ url: request.url
167
+ });
168
+ }
169
+ async function prepareSimulationRequest(request, baseUrl) {
170
+ const webRequest = await createWebRequest(request, baseUrl);
171
+ const requestBody = await webRequest.request.clone().arrayBuffer();
172
+ return {
173
+ request: webRequest.request,
174
+ scenario: webRequest.scenario,
175
+ snapshot: requestSnapshot(webRequest.request, requestBody.byteLength === 0 ? null : new Uint8Array(requestBody))
176
+ };
177
+ }
178
+ function recordSimulationResponse(context, prepared, result, sequence) {
179
+ context.transcript.record({
180
+ context: { scenario: prepared.scenario },
181
+ outcome: {
182
+ kind: 'response',
183
+ response: {
184
+ body: recordedHttpBody(result.body),
185
+ headers: httpHeadersSnapshot(result.response.headers),
186
+ status: result.response.status,
187
+ statusText: result.response.statusText
188
+ }
189
+ },
190
+ request: prepared.snapshot,
191
+ sequence
192
+ }, context.scope);
193
+ }
194
+ async function executeSimulationRequest(context, sequence) {
195
+ const prepared = await prepareSimulationRequest(context.request, context.baseUrl);
196
+ try {
197
+ const result = await respondToSimulationRequest(context.response, context.simulation, prepared.request, prepared.scenario);
198
+ recordSimulationResponse(context, prepared, result, sequence);
199
+ }
200
+ catch (error) {
201
+ context.transcript.record({
202
+ context: { scenario: prepared.scenario },
203
+ outcome: { error: recordedHttpError(error), kind: 'error' },
204
+ request: prepared.snapshot,
205
+ sequence
206
+ }, context.scope);
207
+ throw error;
208
+ }
209
+ }
210
+ function reportSimulationFailure(context, error) {
211
+ try {
212
+ context.recordError(error);
213
+ sendTextResponse(context.response, handlerFailureStatus, 'Simulation handler failed.');
214
+ }
215
+ catch (responseError) {
216
+ context.recordError(responseError);
217
+ }
155
218
  }
156
219
  async function routeSimulationRequest(context) {
220
+ const sequence = context.transcript.nextSequence();
157
221
  try {
158
- const webRequest = await createWebRequest(context.request, context.baseUrl);
159
- await respondToSimulationRequest(context.response, context.simulation, webRequest.request, webRequest.scenario);
222
+ await executeSimulationRequest(context, sequence);
160
223
  }
161
224
  catch (error) {
162
- try {
163
- context.recordError(error);
164
- sendTextResponse(context.response, handlerFailureStatus, 'Simulation handler failed.');
165
- }
166
- catch (responseError) {
167
- context.recordError(responseError);
168
- }
225
+ reportSimulationFailure(context, error);
169
226
  }
170
227
  }
171
228
  function startGuardedRoute(routePromise) {
172
229
  Reflect.get(routePromise, Symbol.toStringTag);
173
230
  }
174
- function createServer(simulation, host, recordError) {
231
+ function createServer(options) {
175
232
  const server = http.createServer(function handleRequest(request, response) {
176
233
  startGuardedRoute(routeSimulationRequest({
177
234
  request,
178
235
  response,
179
- simulation,
180
- baseUrl: serverBaseUrl(server, host),
181
- recordError
236
+ simulation: options.simulation,
237
+ baseUrl: serverBaseUrl(server, options.host),
238
+ recordError: options.recordError,
239
+ scope: options.scope,
240
+ transcript: options.transcript
182
241
  }));
183
242
  });
184
243
  return server;
@@ -210,10 +269,18 @@ function createServerDisposal(server, handlerErrors) {
210
269
  }
211
270
  export function createSimulatedHttpListeningServer(simulation, host) {
212
271
  const handlerErrors = createHandlerErrors();
213
- const server = createServer(simulation, host, handlerErrors.record);
272
+ const transcript = createHttpTranscriptRecorder();
273
+ const server = createServer({
274
+ host,
275
+ recordError: handlerErrors.record,
276
+ scope: currentTranscriptScope(),
277
+ simulation,
278
+ transcript
279
+ });
214
280
  return {
215
281
  errors: handlerErrors.errors,
216
- server
282
+ server,
283
+ transcript: transcript.transcript
217
284
  };
218
285
  }
219
286
  export function assertNoSimulatedHttpHandlerErrors(handlerErrors) {
@@ -230,6 +297,6 @@ export async function startSimulatedHttpServer(options) {
230
297
  const listeningServer = createSimulatedHttpListeningServer(options.simulation, host);
231
298
  const baseUrl = await listenBaseUrl(listeningServer.server, host, port);
232
299
  const disposeServer = createServerDisposal(listeningServer.server, listeningServer.errors);
233
- return simulatedHttpServerHandle(baseUrl, disposeServer);
300
+ return simulatedHttpServerHandle(baseUrl, disposeServer, listeningServer.transcript);
234
301
  }
235
302
  //# sourceMappingURL=simulated-http-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"simulated-http-server.js","sourceRoot":"","sources":["../../../../source/simulation/simulated-http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simulated-http-server.js","sourceRoot":"","sources":["../../../../source/simulation/simulated-http-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { type TranscriptEntry as SharedTranscriptEntry, type TranscriptScope as SharedTranscriptScope, type TranscriptView as SharedTranscriptView } from './transcript-store.ts';
2
+ export type TranscriptEntry = SharedTranscriptEntry;
3
+ export type TranscriptScope = SharedTranscriptScope;
4
+ export type TranscriptView<Entry extends TranscriptEntry = TranscriptEntry> = SharedTranscriptView<Entry>;
5
+ type CompleteHttpBody = {
6
+ readonly bytes: Uint8Array;
7
+ readonly kind: 'complete';
8
+ };
9
+ type TruncatedHttpBody = {
10
+ readonly bytes: Uint8Array;
11
+ readonly kind: 'truncated';
12
+ readonly originalByteLength: number;
13
+ };
14
+ type AbsentHttpBody = {
15
+ readonly kind: 'absent';
16
+ };
17
+ type UnavailableHttpBody = {
18
+ readonly kind: 'unavailable';
19
+ readonly reason: 'body-not-observed' | 'transport-does-not-expose-body';
20
+ };
21
+ export type RecordedHttpBody = AbsentHttpBody | CompleteHttpBody | TruncatedHttpBody | UnavailableHttpBody;
22
+ export type HttpHeadersSnapshot = readonly (readonly [name: string, value: string])[];
23
+ export type HttpRequestSnapshot = {
24
+ readonly body: RecordedHttpBody;
25
+ readonly headers: HttpHeadersSnapshot;
26
+ readonly method: string;
27
+ readonly url: string;
28
+ };
29
+ export type HttpResponseSnapshot = {
30
+ readonly body: RecordedHttpBody;
31
+ readonly headers: HttpHeadersSnapshot;
32
+ readonly status: number;
33
+ readonly statusText: string;
34
+ };
35
+ export type RecordedHttpError = {
36
+ readonly message: string;
37
+ readonly name: string;
38
+ };
39
+ type HttpErrorOutcome = {
40
+ readonly error: RecordedHttpError;
41
+ readonly kind: 'error';
42
+ };
43
+ type HttpIncompleteOutcome = {
44
+ readonly kind: 'incomplete';
45
+ readonly reason: 'resource-disposed';
46
+ };
47
+ type HttpResponseOutcome = {
48
+ readonly kind: 'response';
49
+ readonly response: HttpResponseSnapshot;
50
+ };
51
+ export type HttpInteractionOutcome = HttpErrorOutcome | HttpIncompleteOutcome | HttpResponseOutcome;
52
+ export type HttpInteraction<Context> = {
53
+ readonly context: Context;
54
+ readonly outcome: HttpInteractionOutcome;
55
+ readonly request: HttpRequestSnapshot;
56
+ readonly sequence: number;
57
+ };
58
+ export type HttpTranscriptEntry<Context = null> = readonly ['http', HttpInteraction<Context>];
59
+ export type TranscriptCaptureErrorEntry = readonly [
60
+ 'capture-error',
61
+ {
62
+ readonly message: string;
63
+ readonly source: 'custom' | 'node-http' | 'undici';
64
+ }
65
+ ];
66
+ export type HttpTranscript<Context = null> = TranscriptView<HttpTranscriptEntry<Context> | TranscriptCaptureErrorEntry>;
67
+ export type HttpTranscriptRecorder<Context> = {
68
+ readonly currentScope: () => TranscriptScope | null;
69
+ readonly nextSequence: () => number;
70
+ readonly record: (interaction: HttpInteraction<Context>, scope: TranscriptScope | null) => void;
71
+ readonly recordCaptureError: (source: TranscriptCaptureErrorEntry[1]['source'], error: unknown, scope: TranscriptScope | null) => void;
72
+ readonly transcript: HttpTranscript<Context>;
73
+ };
74
+ export declare function emptyTranscriptView<Entry extends TranscriptEntry = never>(): TranscriptView<Entry>;
75
+ export declare function captureErrorHttpTranscript(error: unknown): HttpTranscript<never>;
76
+ export declare function recordedHttpBody(body: Uint8Array | null): RecordedHttpBody;
77
+ export declare function httpHeadersSnapshot(headers: Headers): HttpHeadersSnapshot;
78
+ export declare function recordedHttpError(error: unknown): RecordedHttpError;
79
+ export declare function createHttpTranscriptRecorder<Context>(): HttpTranscriptRecorder<Context>;
80
+ export {};
81
+ //# sourceMappingURL=http-transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-transcript.d.ts","sourceRoot":"","sources":["../../../../source/transcript/http-transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { createTranscriptStore, currentTranscriptScope } from "./transcript-store.js";
2
+ export const httpTranscriptBodyByteLimit = Number('16384');
3
+ export function emptyTranscriptView() {
4
+ return createTranscriptStore().view;
5
+ }
6
+ export function captureErrorHttpTranscript(error) {
7
+ const store = createTranscriptStore();
8
+ store.record('capture-error', {
9
+ message: error instanceof Error ? error.message : String(error),
10
+ source: 'custom'
11
+ });
12
+ return store.view;
13
+ }
14
+ export function recordedHttpBody(body) {
15
+ if (body === null || body.byteLength === 0) {
16
+ return { kind: 'absent' };
17
+ }
18
+ if (body.byteLength <= httpTranscriptBodyByteLimit) {
19
+ return { bytes: Uint8Array.from(body), kind: 'complete' };
20
+ }
21
+ return {
22
+ bytes: Uint8Array.from(body.subarray(0, httpTranscriptBodyByteLimit)),
23
+ kind: 'truncated',
24
+ originalByteLength: body.byteLength
25
+ };
26
+ }
27
+ export function httpHeadersSnapshot(headers) {
28
+ return Object.freeze(Array.from(headers.entries(), function entry([name, value]) {
29
+ return Object.freeze([name.toLowerCase(), value]);
30
+ }));
31
+ }
32
+ export function recordedHttpError(error) {
33
+ return error instanceof Error
34
+ ? { message: error.message, name: error.name }
35
+ : { message: String(error), name: 'Error' };
36
+ }
37
+ export function createHttpTranscriptRecorder() {
38
+ const store = createTranscriptStore();
39
+ let sequence = 0;
40
+ return Object.freeze({
41
+ currentScope: currentTranscriptScope,
42
+ nextSequence() {
43
+ const current = sequence;
44
+ sequence += 1;
45
+ return current;
46
+ },
47
+ record(interaction, scope) {
48
+ store.recordInScope(scope, 'http', interaction);
49
+ },
50
+ recordCaptureError(source, error, scope) {
51
+ const entry = ['capture-error', {
52
+ message: error instanceof Error ? error.message : String(error),
53
+ source
54
+ }];
55
+ store.recordInScope(scope, ...entry);
56
+ },
57
+ transcript: store.view
58
+ });
59
+ }
60
+ //# sourceMappingURL=http-transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-transcript.js","sourceRoot":"","sources":["../../../../source/transcript/http-transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type TranscriptScope = Readonly<Record<string, unknown>>;
2
+ export type TranscriptEntry = readonly [kind: string, ...values: readonly unknown[]];
3
+ export type TranscriptView<Entry extends TranscriptEntry = TranscriptEntry> = {
4
+ readonly entryCount: number;
5
+ readonly entries: readonly Entry[];
6
+ readonly firstEntry: Entry | null;
7
+ readonly lastEntry: Entry | null;
8
+ readonly nthEntry: (index: number) => Entry | null;
9
+ };
10
+ export {};
11
+ //# sourceMappingURL=transcript-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-store.d.ts","sourceRoot":"","sources":["../../../../source/transcript/transcript-store.ts"],"names":[],"mappings":"MAIM,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC;AAErF,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,eAAe,GAAG,eAAe,IAAI;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,KAAK,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC;CACtD,CAAC;AAEF,MAAM,CAAuD,EAK5D,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ const transcriptIdentity = Symbol.for('@overkill-dev/transcript');
3
+ const activeTranscriptScope = new AsyncLocalStorage();
4
+ const noEntries = Object.freeze([]);
5
+ function validIndex(index) {
6
+ return Number.isSafeInteger(index) && index >= 0;
7
+ }
8
+ export function brandTranscriptView(subject) {
9
+ Object.defineProperty(subject, transcriptIdentity, {
10
+ enumerable: false,
11
+ value: true
12
+ });
13
+ return Object.freeze(subject);
14
+ }
15
+ export function currentTranscriptScope() {
16
+ return activeTranscriptScope.getStore() ?? null;
17
+ }
18
+
19
+ function brandedView(currentEntries) {
20
+ const view = {
21
+ get entries() {
22
+ return currentEntries();
23
+ },
24
+ get entryCount() {
25
+ return currentEntries().length;
26
+ },
27
+ get firstEntry() {
28
+ return currentEntries()[0] ?? null;
29
+ },
30
+ get lastEntry() {
31
+ return currentEntries().at(-1) ?? null;
32
+ },
33
+ nthEntry(index) {
34
+ return validIndex(index) ? currentEntries()[index] ?? null : null;
35
+ }
36
+ };
37
+ return brandTranscriptView(view);
38
+ }
39
+ export function createTranscriptStore() {
40
+ const entries = [];
41
+ let scopedEntries = new WeakMap();
42
+ function recordInScope(scope, entry) {
43
+ entries.push(entry);
44
+ if (scope !== null) {
45
+ const scopeEntries = scopedEntries.get(scope) ?? [];
46
+ scopeEntries.push(entry);
47
+ scopedEntries.set(scope, scopeEntries);
48
+ }
49
+ }
50
+ function currentEntries() {
51
+ const scope = currentTranscriptScope();
52
+ return scope === null ? entries : scopedEntries.get(scope) ?? noEntries;
53
+ }
54
+ return Object.freeze({
55
+ record(...entry) {
56
+ recordInScope(currentTranscriptScope(), entry);
57
+ },
58
+ recordInScope(scope, ...entry) {
59
+ recordInScope(scope, entry);
60
+ },
61
+ reset() {
62
+ entries.length = 0;
63
+ scopedEntries = new WeakMap();
64
+ },
65
+ view: brandedView(currentEntries)
66
+ });
67
+ }
68
+
69
+ //# sourceMappingURL=transcript-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-store.js","sourceRoot":"","sources":["../../../../source/transcript/transcript-store.ts"],"names":[],"mappings":"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"}