@overkill-dev/resources 0.0.11 → 0.0.13

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 (107) hide show
  1. package/attachments/attachment-context.d.ts +5 -1
  2. package/attachments/attachment-context.d.ts.map +1 -1
  3. package/attachments/attachment-context.js +10 -0
  4. package/attachments/attachment-context.js.map +1 -1
  5. package/attachments/failure-artifact-stream.js +147 -0
  6. package/attachments/failure-artifact-stream.js.map +1 -0
  7. package/attachments/json-snapshot.js +110 -0
  8. package/attachments/json-snapshot.js.map +1 -0
  9. package/attachments/resource-failure-context.js +45 -0
  10. package/attachments/resource-failure-context.js.map +1 -0
  11. package/canonical-identity.js +54 -0
  12. package/canonical-identity.js.map +1 -0
  13. package/engine/identity.d.ts +5 -0
  14. package/engine/identity.d.ts.map +1 -1
  15. package/engine/identity.js +41 -0
  16. package/engine/identity.js.map +1 -0
  17. package/engine/run-artifact.d.ts +1 -1
  18. package/engine/run-artifact.d.ts.map +1 -1
  19. package/engine/runtime-attachment.d.ts +26 -6
  20. package/engine/runtime-attachment.d.ts.map +1 -1
  21. package/engine/runtime-attachment.js +7 -0
  22. package/engine/runtime-attachment.js.map +1 -0
  23. package/engine/workload-input.d.ts +8 -0
  24. package/engine/workload-input.d.ts.map +1 -0
  25. package/engine/workload-input.js +54 -0
  26. package/engine/workload-input.js.map +1 -0
  27. package/engine/workload-parameters.d.ts +3 -0
  28. package/engine/workload-parameters.d.ts.map +1 -0
  29. package/engine/workload-parameters.js +67 -0
  30. package/engine/workload-parameters.js.map +1 -0
  31. package/package-version.js +31 -0
  32. package/package-version.js.map +1 -0
  33. package/package.json +11 -3
  34. package/packages/resources/attachment-context.entry-point.d.ts +1 -1
  35. package/packages/resources/attachment-context.entry-point.d.ts.map +1 -1
  36. package/packages/resources/attachment-context.entry-point.js +1 -1
  37. package/packages/resources/attachment-context.entry-point.js.map +1 -1
  38. package/packages/resources/resources.entry-point.d.ts +7 -0
  39. package/packages/resources/resources.entry-point.d.ts.map +1 -1
  40. package/packages/resources/resources.entry-point.js +3 -0
  41. package/packages/resources/resources.entry-point.js.map +1 -1
  42. package/readme.md +46 -1
  43. package/resources/failure-artifacts.d.ts +49 -0
  44. package/resources/failure-artifacts.d.ts.map +1 -0
  45. package/resources/failure-artifacts.js +34 -0
  46. package/resources/failure-artifacts.js.map +1 -0
  47. package/resources/http-request-attribution.js +23 -0
  48. package/resources/http-request-attribution.js.map +1 -0
  49. package/resources/local-http-failure-capture.js +43 -0
  50. package/resources/local-http-failure-capture.js.map +1 -0
  51. package/resources/local-http-service-resource.d.ts.map +1 -1
  52. package/resources/local-http-service-resource.js +18 -7
  53. package/resources/local-http-service-resource.js.map +1 -1
  54. package/resources/local-http-transcript-observer.js +14 -21
  55. package/resources/local-http-transcript-observer.js.map +1 -1
  56. package/resources/local-process-service-resource.d.ts +1 -1
  57. package/resources/local-process-service-resource.d.ts.map +1 -1
  58. package/resources/local-process-service-resource.js +85 -12
  59. package/resources/local-process-service-resource.js.map +1 -1
  60. package/resources/local-service-resource.d.ts +26 -26
  61. package/resources/local-service-resource.d.ts.map +1 -1
  62. package/resources/local-service-resource.js +9 -5
  63. package/resources/local-service-resource.js.map +1 -1
  64. package/resources/resource-authoring-types.d.ts +22 -0
  65. package/resources/resource-authoring-types.d.ts.map +1 -0
  66. package/resources/resource-definition-shape.d.ts +2 -0
  67. package/resources/resource-definition-shape.d.ts.map +1 -1
  68. package/resources/resource-definition-types.d.ts +23 -15
  69. package/resources/resource-definition-types.d.ts.map +1 -1
  70. package/resources/resource-definition.d.ts +9 -0
  71. package/resources/resource-definition.d.ts.map +1 -0
  72. package/resources/resource-definition.js +17 -2
  73. package/resources/resource-definition.js.map +1 -1
  74. package/resources/resource-scenario-binding.js +9 -5
  75. package/resources/resource-scenario-binding.js.map +1 -1
  76. package/resources/resource-scenario.d.ts +3 -0
  77. package/resources/resource-scenario.d.ts.map +1 -1
  78. package/resources/resource-session.d.ts +5 -0
  79. package/resources/resource-session.d.ts.map +1 -1
  80. package/resources/resource-session.js +26 -5
  81. package/resources/resource-session.js.map +1 -1
  82. package/resources/resource-workload-binding.d.ts +9 -0
  83. package/resources/resource-workload-binding.d.ts.map +1 -0
  84. package/resources/resource-workload-binding.js +94 -0
  85. package/resources/resource-workload-binding.js.map +1 -0
  86. package/resources/resource-workload-types.d.ts +8 -0
  87. package/resources/resource-workload-types.d.ts.map +1 -0
  88. package/resources/resource-workload-types.js +4 -0
  89. package/resources/resource-workload-types.js.map +1 -0
  90. package/resources/resources.d.ts +12 -16
  91. package/resources/resources.d.ts.map +1 -1
  92. package/resources/resources.js.map +1 -1
  93. package/resources/runtime-lifecycle.d.ts +5 -0
  94. package/resources/runtime-lifecycle.d.ts.map +1 -1
  95. package/resources/runtime-lifecycle.js +5 -1
  96. package/resources/runtime-lifecycle.js.map +1 -1
  97. package/resources/runtime-workload-binding.d.ts +4 -0
  98. package/resources/runtime-workload-binding.d.ts.map +1 -0
  99. package/resources/runtime-workload-binding.js +32 -0
  100. package/resources/runtime-workload-binding.js.map +1 -0
  101. package/resources/simulated-http-server-resource.d.ts +1 -1
  102. package/resources/simulated-http-server-resource.d.ts.map +1 -1
  103. package/resources/simulated-http-server-resource.js +31 -3
  104. package/resources/simulated-http-server-resource.js.map +1 -1
  105. package/sbom.cdx.json +28 -11
  106. package/stored-value.js +12 -0
  107. package/stored-value.js.map +1 -0
@@ -0,0 +1,54 @@
1
+ import { canonicalIdentityJson } from "../canonical-identity.js";
2
+ import { snapshotWorkloadParameters } from "./workload-parameters.js";
3
+ export function workloadParameterIdentity(parameters) {
4
+ return Object.freeze(Object.fromEntries(Object
5
+ .entries(parameters)
6
+ .map(function encodeParameter([key, value]) {
7
+ return [key.normalize('NFC'), canonicalIdentityJson(value)];
8
+ })
9
+ .toSorted(function compareNames([left], [right]) {
10
+ return left.localeCompare(right);
11
+ })));
12
+ }
13
+ export function isWorkloadRecord(value) {
14
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
15
+ }
16
+ function readWorkloadName(value) {
17
+ if (typeof value !== 'string' || value.trim().length === 0 || /\p{Cc}/v.test(value)) {
18
+ throw new TypeError('Workload identities require non-empty names without control characters.');
19
+ }
20
+ return value;
21
+ }
22
+ function readIdentityParameters(value) {
23
+ if (!isWorkloadRecord(value)) {
24
+ throw new TypeError('Workload identities require a string parameter record.');
25
+ }
26
+ const keys = new Set();
27
+ const entries = Object.entries(value).map(function readParameter([key, parameter]) {
28
+ const canonicalKey = key.normalize('NFC');
29
+ if (typeof parameter !== 'string' || keys.has(canonicalKey)) {
30
+ throw new TypeError('Workload identity parameters must be strings with distinct canonical keys.');
31
+ }
32
+ keys.add(canonicalKey);
33
+ return [canonicalKey, parameter];
34
+ });
35
+ return Object.freeze(Object.fromEntries(entries));
36
+ }
37
+ export function readWorkloadId(value) {
38
+ if (!isWorkloadRecord(value)) {
39
+ throw new TypeError('Workload identities require a name and string parameter record.');
40
+ }
41
+ return Object.freeze({ name: readWorkloadName(value.name), params: readIdentityParameters(value.params) });
42
+ }
43
+ export function snapshotWorkloadInput(input) {
44
+ const id = readWorkloadId(input.id);
45
+ const parameters = snapshotWorkloadParameters(input.parameters);
46
+ if (canonicalIdentityJson(workloadParameterIdentity(parameters)) !== canonicalIdentityJson(id.params)) {
47
+ throw new TypeError(`Workload "${input.id.name}" parameters do not match its identity.`);
48
+ }
49
+ return Object.freeze({
50
+ id,
51
+ parameters
52
+ });
53
+ }
54
+ //# sourceMappingURL=workload-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workload-input.js","sourceRoot":"","sources":["../../../../source/engine/workload-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { JsonObject, ReadonlyDeep } from 'type-fest';
2
+ export type WorkloadParameters = ReadonlyDeep<JsonObject>;
3
+ //# sourceMappingURL=workload-parameters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workload-parameters.d.ts","sourceRoot":"","sources":["../../../../source/engine/workload-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,YAAY,EAAE,MAAM,WAAW,CAAC;AAGrE,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { snapshotValidatedJson } from "../attachments/json-snapshot.js";
2
+ function isParameterRecord(value) {
3
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
4
+ }
5
+ function isContainer(value) {
6
+ return typeof value === 'object' && value !== null;
7
+ }
8
+ function readDataKey(value, key) {
9
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
10
+ if (typeof key !== 'string' || descriptor?.enumerable !== true || !Object.hasOwn(descriptor, 'value')) {
11
+ throw new TypeError('Workload parameters require enumerable string data properties.');
12
+ }
13
+ return key;
14
+ }
15
+ function isArrayIndex(key, length) {
16
+ return /^(?:0|[1-9]\d*)$/v.test(key) && Number(key) < length;
17
+ }
18
+ function parameterKeys(value) {
19
+ return Reflect
20
+ .ownKeys(value)
21
+ .filter(function dataKey(key) {
22
+ return !Array.isArray(value) || key !== 'length';
23
+ })
24
+ .map(function validatedKey(key) {
25
+ const name = readDataKey(value, key);
26
+ if (Array.isArray(value) && !isArrayIndex(name, value.length)) {
27
+ throw new TypeError('Workload arrays cannot contain additional properties.');
28
+ }
29
+ return name.normalize('NFC');
30
+ });
31
+ }
32
+ function validateParameterContainer(value) {
33
+ if (Array.isArray(value) && Object.getPrototypeOf(value) !== Array.prototype) {
34
+ throw new TypeError('Workload parameters require ordinary JSON arrays.');
35
+ }
36
+ const keys = parameterKeys(value);
37
+ const distinctKeys = new Set(keys);
38
+ if (distinctKeys.size !== keys.length) {
39
+ throw new TypeError('Workload parameter keys must be distinct after Unicode normalization.');
40
+ }
41
+ }
42
+ function validateParameterValue(value) {
43
+ if (Object.is(value, -0)) {
44
+ throw new TypeError('Workload parameters cannot contain negative zero.');
45
+ }
46
+ if (isContainer(value)) {
47
+ validateParameterContainer(value);
48
+ }
49
+ }
50
+ function snapshotParameters(value) {
51
+ try {
52
+ return snapshotValidatedJson(value, validateParameterValue).value;
53
+ }
54
+ catch (error) {
55
+ throw new TypeError('workload() requires lossless, acyclic JSON parameters with depth at most 64.', {
56
+ cause: error
57
+ });
58
+ }
59
+ }
60
+ export function snapshotWorkloadParameters(value) {
61
+ const snapshot = snapshotParameters(value);
62
+ if (!isParameterRecord(snapshot)) {
63
+ throw new TypeError('workload() requires a JSON parameter record.');
64
+ }
65
+ return snapshot;
66
+ }
67
+ //# sourceMappingURL=workload-parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workload-parameters.js","sourceRoot":"","sources":["../../../../source/engine/workload-parameters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { z } from 'zod';
5
+ const packageVersionSchema = z.object({ name: z.string(), version: z.string() });
6
+ async function parsePackageVersion(manifestPath) {
7
+ const contents = await readFile(manifestPath, 'utf8');
8
+ const parsed = packageVersionSchema.safeParse(JSON.parse(contents));
9
+ return parsed.success ? parsed.data : null;
10
+ }
11
+ async function readPackageVersion(directory) {
12
+ const manifestPath = path.join(directory, 'package.json');
13
+ try {
14
+ return await parsePackageVersion(manifestPath);
15
+ }
16
+ catch (error) {
17
+ if (error instanceof Error && Reflect.get(error, 'code') === 'ENOENT' && path.dirname(directory) !== directory) {
18
+ return await readPackageVersion(path.dirname(directory));
19
+ }
20
+ return null;
21
+ }
22
+ }
23
+ export async function packageVersion(moduleUrl) {
24
+ try {
25
+ return await readPackageVersion(path.dirname(fileURLToPath(moduleUrl)));
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ //# sourceMappingURL=package-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-version.js","sourceRoot":"","sources":["../../../source/package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAGjF,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IACnD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC;QACD,OAAO,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,IACI,KAAK,YAAY,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,EAC5G,CAAC;YACC,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB;IAClD,IAAI,CAAC;QACD,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -4,7 +4,8 @@
4
4
  "url": "https://github.com/enormora/overkill/issues"
5
5
  },
6
6
  "dependencies": {
7
- "type-fest": "5.10.0"
7
+ "type-fest": "5.10.0",
8
+ "zod": "4.6.5"
8
9
  },
9
10
  "description": "Typed Overkill resource and runtime descriptors.",
10
11
  "engines": {
@@ -29,7 +30,7 @@
29
30
  "license": "MIT",
30
31
  "name": "@overkill-dev/resources",
31
32
  "peerDependencies": {
32
- "@overkill-dev/simulation": "0.0.4"
33
+ "@overkill-dev/simulation": "0.0.5"
33
34
  },
34
35
  "repository": {
35
36
  "type": "git",
@@ -37,17 +38,24 @@
37
38
  },
38
39
  "sideEffects": [
39
40
  "./attachments/attachment-context.js",
41
+ "./attachments/failure-artifact-stream.js",
42
+ "./attachments/json-snapshot.js",
43
+ "./attachments/resource-failure-context.js",
44
+ "./engine/runtime-attachment.js",
45
+ "./package-version.js",
40
46
  "./packages/resources/resources.entry-point.js",
47
+ "./resources/failure-artifacts.js",
41
48
  "./resources/local-http-transcript-observer.js",
42
49
  "./resources/local-service-resource.js",
43
50
  "./resources/resource-definition-brand.js",
44
51
  "./resources/resource-definition.js",
45
52
  "./resources/resource-lifecycle-error.js",
46
53
  "./resources/resource-scenario-binding.js",
54
+ "./resources/resource-workload-binding.js",
47
55
  "./resources/resources.js",
48
56
  "./resources/runtime-definition.js",
49
57
  "./resources/runtime-matrix-definition.js"
50
58
  ],
51
59
  "type": "module",
52
- "version": "0.0.11"
60
+ "version": "0.0.13"
53
61
  }
@@ -1,3 +1,3 @@
1
- export { attachmentsForProducer, resourceAttachments, runWithAttachmentContext } from '../../attachments/attachment-context.ts';
1
+ export { attachmentsForProducer, currentAttachmentLimits, resourceAttachments, preparedResourceAttachments, runWithAttachmentContext } from '../../attachments/attachment-context.ts';
2
2
  export type { AttachmentContext } from '../../attachments/attachment-context.ts';
3
3
  //# sourceMappingURL=attachment-context.entry-point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-context.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
1
+ {"version":3,"file":"attachment-context.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC"}
@@ -1,2 +1,2 @@
1
- export { attachmentsForProducer, resourceAttachments, runWithAttachmentContext } from "../../attachments/attachment-context.js";
1
+ export { attachmentsForProducer, currentAttachmentLimits, resourceAttachments, preparedResourceAttachments, runWithAttachmentContext } from "../../attachments/attachment-context.js";
2
2
  //# sourceMappingURL=attachment-context.entry-point.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-context.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC"}
1
+ {"version":3,"file":"attachment-context.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/attachment-context.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EAC3B,MAAM,yCAAyC,CAAC"}
@@ -27,4 +27,11 @@ export type { RuntimeDefinition as Runtime, RuntimeResourceMap as ResourceMap }
27
27
  export type { ResourceLifecycleFailure, ResourceLifecyclePhase } from '../../resources/resource-lifecycle-error.ts';
28
28
  export type { ResourceSession, ResourceSessionDisposalContext, StartResourcesRequest } from '../../resources/resource-session.ts';
29
29
  export type { RuntimeSession, RuntimeSessionDisposalContext, StartRuntimeRequest } from '../../resources/runtime-lifecycle.ts';
30
+ export { withFailureArtifacts } from '../../resources/failure-artifacts.ts';
31
+ export type { FailureArtifactAttachments, ResourceFailureCapture, SimulationWitnessArtifact, SimulationWitnessInput } from '../../resources/failure-artifacts.ts';
32
+ export type { ResourceWorkload, ResourceWorkloadParser } from '../../resources/resources.ts';
33
+ export type { WorkloadInput, WorkloadParameters } from '../../engine/workload-input.ts';
34
+ export { createWorkloadResourceBinding, resourceWorkloadIdentity } from '../../resources/resource-workload-binding.ts';
35
+ export type { WorkloadResourceBinding } from '../../resources/resource-workload-binding.ts';
36
+ export { bindRuntimeWorkload } from '../../resources/runtime-workload-binding.ts';
30
37
  //# sourceMappingURL=resources.entry-point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resources.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,7 @@ export { assertPerCaseResourceGraph, assertResourceDependencyScopes } from "../.
26
26
  export { startResources } from "../../resources/resource-session.js";
27
27
  export { ResourceLifecycleError } from "../../resources/resource-lifecycle-error.js";
28
28
  export { startRuntime } from "../../resources/runtime-lifecycle.js";
29
+ export { withFailureArtifacts } from "../../resources/failure-artifacts.js";
30
+ export { createWorkloadResourceBinding, resourceWorkloadIdentity } from "../../resources/resource-workload-binding.js";
31
+ export { bindRuntimeWorkload } from "../../resources/runtime-workload-binding.js";
29
32
  //# sourceMappingURL=resources.entry-point.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resources.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,8BAA8B,CAAC;AAU3F,OAAO,EACH,0BAA0B,EAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACH,8BAA8B,EACjC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAE3D,MAAM,eAAe,GAAG,qBAAqB,CAAC;IAC1C,4BAA4B,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC;IAC7E,KAAK,CAAC,wBAAwB,CAAC,UAAU;QACrC,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,IAAI;QACtB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAA6C,eAAe,CAAC,qBAAqB,CAAC;AACrH,MAAM,CAAC,MAAM,eAAe,GAAuC,eAAe,CAAC,eAAe,CAAC;AACnG,MAAM,CAAC,MAAM,gCAAgC,GACzC,eAAe,CAAC,gCAAgC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAsC,eAAe,CAAC,cAAc,CAAC;AAChG,MAAM,CAAC,MAAM,aAAa,GAAqC,eAAe,CAAC,aAAa,CAAC;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAA2C,eAAe,CAAC,mBAAmB,CAAC;AAE/G,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACH,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,0BAA0B,EAC1B,8BAA8B,EACjC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,cAAc,EACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACH,sBAAsB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACH,YAAY,EACf,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"resources.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/resources/resources.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,8BAA8B,CAAC;AAU3F,OAAO,EACH,0BAA0B,EAC7B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACH,8BAA8B,EACjC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAE3D,MAAM,eAAe,GAAG,qBAAqB,CAAC;IAC1C,4BAA4B,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC;IAC7E,KAAK,CAAC,wBAAwB,CAAC,UAAU;QACrC,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,IAAI;QACtB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAA6C,eAAe,CAAC,qBAAqB,CAAC;AACrH,MAAM,CAAC,MAAM,eAAe,GAAuC,eAAe,CAAC,eAAe,CAAC;AACnG,MAAM,CAAC,MAAM,gCAAgC,GACzC,eAAe,CAAC,gCAAgC,CAAC;AACrD,MAAM,CAAC,MAAM,cAAc,GAAsC,eAAe,CAAC,cAAc,CAAC;AAChG,MAAM,CAAC,MAAM,aAAa,GAAqC,eAAe,CAAC,aAAa,CAAC;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAA2C,eAAe,CAAC,mBAAmB,CAAC;AAE/G,OAAO,EACH,iCAAiC,EACpC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACH,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,0BAA0B,EAC1B,8BAA8B,EACjC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,cAAc,EACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACH,sBAAsB,EACzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACH,YAAY,EACf,MAAM,sCAAsC,CAAC;AA4G9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAW5E,OAAO,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AAEvH,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC"}
package/readme.md CHANGED
@@ -118,6 +118,24 @@ Dependency context uses the keys from the resource's `dependencies` object.
118
118
  Omitting `dependencies` is accepted for compatibility and produces
119
119
  `dependencies: {}` on the returned descriptor.
120
120
 
121
+ Resources can declare workload dependence with `workload: parseParameters`.
122
+ This pure synchronous parser validates original JSON parameters during collection
123
+ and executor recollection. Acquisition and disposal receive the same parsed
124
+ `{ id, parameters }` through `context.workload`; independent callbacks receive
125
+ `null`. Local service callbacks carry this input through `start`, `ready`, and
126
+ `dispose`. Explicit `startResources` and `startRuntime` sessions accept a
127
+ `workload` input containing its identity and parameters.
128
+
129
+ Workload-dependent resources and their consumers share by scope and full workload
130
+ identity. Independent dependencies retain their existing sharing across workloads
131
+ and runtime variants. Ordinary scenarios, projections, startup budgets, placement
132
+ requirements, and attachments still apply. Equal canonical workload identities
133
+ with different original inputs cannot share one resource boundary.
134
+
135
+ Advanced DSLs bind graphs through `createWorkloadResourceBinding` and
136
+ `bindRuntimeWorkload`; `resourceWorkloadIdentity` reads a bound descriptor's
137
+ workload identity. Engine input snapshots preserve original parameter spelling.
138
+
121
139
  `createTemporaryDirectoryResource(name)` returns a per-case resource descriptor
122
140
  whose handle exposes `path` and an empty `transcript`. Each acquisition creates
123
141
  a unique directory with an Overkill prefix. Disposal removes that directory
@@ -191,7 +209,34 @@ Attachments require runner-managed integration execution. Standalone
191
209
 
192
210
  `@overkill-dev/resources/attachment-context` exposes the shared context bridge
193
211
  for runner and authoring integrations. Test authors should use `scope.attachments`.
194
- Service transcripts and logs are retained only when explicitly attached.
212
+ Runner-managed integration failures automatically retain first-party HTTP
213
+ transcripts, process stdout/stderr, and simulated HTTP scenario witnesses.
214
+ Passing attempts discard this prepared evidence; explicit attachments retain
215
+ their existing behavior.
216
+
217
+ `withFailureArtifacts(resource, prepare)` adds custom evidence preparation.
218
+ The callback receives the owner handle, including for projected resources.
219
+ An `attempt` capture includes the exact work identity, retry attempt, and an
220
+ attachment sink with `witness(...)`. Shared-resource `lifetime` captures use a
221
+ run-scoped attachment sink. Preparation runs before scope cleanup and resource
222
+ disposal, including for passing bodies that may fail during cleanup.
223
+ Lifetime collectors read the complete resource transcript; attempt collectors
224
+ read the current attempt's entries.
225
+
226
+ ```ts
227
+ const diagnosticService = withFailureArtifacts(service, async (capture) => {
228
+ await capture.attachments.file(
229
+ { name: 'service-log', mediaType: 'text/plain' },
230
+ capture.handle.logPath
231
+ );
232
+ });
233
+ ```
234
+
235
+ First-party output checkpoints received prefixes during execution. Custom
236
+ collectors run before teardown and cannot recover data after their owner
237
+ crashes. Shared logs keep run attribution; precisely scoped interactions keep
238
+ case and attempt attribution. Collector failures are artifact errors and do
239
+ not prevent resource disposal.
195
240
 
196
241
  Resources may declare finite scenario slots with a default, timing, and allowed
197
242
  values. `defineRuntime(...)` lifts slots from its complete dependency graph.
@@ -0,0 +1,49 @@
1
+ import type { JsonValue, ReadonlyDeep } from 'type-fest';
2
+ import type { AttemptId, WorkId } from '../engine/identity.ts';
3
+ import type { RuntimeAttachmentArtifact, RuntimeAttachments } from '../engine/runtime-attachment.ts';
4
+ import type { AnyResourceDefinition, Awaitable } from './resource-definition-shape.ts';
5
+ export type SimulationWitnessInput = {
6
+ readonly producedBy: {
7
+ readonly library: string;
8
+ readonly libraryVersion: string;
9
+ };
10
+ readonly simulation: {
11
+ readonly name: string;
12
+ readonly payload: ReadonlyDeep<JsonValue>;
13
+ };
14
+ readonly scenario: string;
15
+ readonly seed: bigint | null;
16
+ readonly runtimeSnapshot: ReadonlyDeep<JsonValue>;
17
+ readonly faultConfiguration: ReadonlyDeep<JsonValue>;
18
+ };
19
+ export type SimulationWitnessArtifact = RuntimeAttachmentArtifact & {
20
+ readonly id: RuntimeAttachmentArtifact['id'] & {
21
+ readonly subtype: 'witness';
22
+ };
23
+ readonly source: 'native';
24
+ };
25
+ export type FailureArtifactAttachments = RuntimeAttachments & {
26
+ readonly witness: (input: SimulationWitnessInput) => Promise<SimulationWitnessArtifact>;
27
+ };
28
+ type FailureSubject = Pick<AnyResourceDefinition, 'acquire' | 'dependencies' | 'dispose' | 'name' | 'requirements' | 'scenarios' | 'scope'>;
29
+ type CaptureHandle<Resource extends FailureSubject> = {
30
+ readonly handle: Awaited<ReturnType<Resource['acquire']>>;
31
+ readonly resource: string;
32
+ readonly scenarios: Readonly<Record<string, string>>;
33
+ readonly signal: AbortSignal;
34
+ };
35
+ type AttemptCapture = {
36
+ readonly kind: 'attempt';
37
+ readonly work: WorkId;
38
+ readonly attempt: AttemptId;
39
+ readonly attachments: FailureArtifactAttachments;
40
+ };
41
+ type LifetimeCapture = {
42
+ readonly kind: 'lifetime';
43
+ readonly attachments: RuntimeAttachments;
44
+ };
45
+ type Capture = AttemptCapture | LifetimeCapture;
46
+ export type ResourceFailureCapture<Resource extends FailureSubject> = Capture & CaptureHandle<Resource>;
47
+ export declare function withFailureArtifacts<Resource extends FailureSubject>(resource: Resource, prepare: (capture: ResourceFailureCapture<Resource>) => Awaitable<void>): Resource;
48
+ export {};
49
+ //# sourceMappingURL=failure-artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-artifacts.d.ts","sourceRoot":"","sources":["../../../../source/resources/failure-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAEvF,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;KAAE,CAAC;IACpF,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;KAAE,CAAC;IAC3F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAClD,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;CACxD,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,yBAAyB,GAAG;IAChE,QAAQ,CAAC,EAAE,EAAE,yBAAyB,CAAC,IAAI,CAAC,GAAG;QAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;KAAE,CAAC;IAChF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;CAC7B,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,GAAG;IAC1D,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC3F,CAAC;AACF,KAAK,cAAc,GAAG,IAAI,CACtB,qBAAqB,EACrB,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,OAAO,CAC3F,CAAC;AAEF,KAAK,aAAa,CAAC,QAAQ,SAAS,cAAc,IAAI;IAClD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAChC,CAAC;AACF,KAAK,cAAc,GAAG;IAClB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;CACpD,CAAC;AACF,KAAK,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;CAAE,CAAC;AAChG,KAAK,OAAO,GAAG,cAAc,GAAG,eAAe,CAAC;AAChD,MAAM,MAAM,sBAAsB,CAAC,QAAQ,SAAS,cAAc,IAAI,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;AAIxG,wBAAgB,oBAAoB,CAAC,QAAQ,SAAS,cAAc,EAChE,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,GACxE,QAAQ,CA8BV;AAED"}
@@ -0,0 +1,34 @@
1
+ const preparationKey = Symbol.for('@overkill-dev/resource-failure-preparation/v1');
2
+ export function withFailureArtifacts(resource, prepare) {
3
+ const previous = Reflect.get(resource, preparationKey);
4
+ return Object.freeze({
5
+ ...resource,
6
+ async [preparationKey](capture) {
7
+ const callbacks = [
8
+ async function preparePrevious() {
9
+ if (typeof previous === 'function') {
10
+ await Reflect.apply(previous, undefined, [capture]);
11
+ }
12
+ },
13
+ async function prepareCurrent() {
14
+ await prepare(capture);
15
+ }
16
+ ];
17
+ const failures = [];
18
+ for (const callback of callbacks) {
19
+ const [result] = await Promise.allSettled([callback()]);
20
+ if (result.status === 'rejected') {
21
+ failures.push(result.reason);
22
+ }
23
+ }
24
+ if (failures.length === 1 && failures[0] instanceof Error) {
25
+ throw failures[0];
26
+ }
27
+ if (failures.length > 0) {
28
+ throw new AggregateError(failures, 'Resource failure artifact preparation failed.');
29
+ }
30
+ }
31
+ });
32
+ }
33
+
34
+ //# sourceMappingURL=failure-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-artifacts.js","sourceRoot":"","sources":["../../../../source/resources/failure-artifacts.ts"],"names":[],"mappings":"AAyCA,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAEnF,MAAM,UAAU,oBAAoB,CAChC,QAAkB,EAClB,OAAuE;IAEvE,MAAM,QAAQ,GAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,GAAG,QAAQ;QACX,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,OAAyC;YAC5D,MAAM,SAAS,GAAG;gBACd,KAAK,UAAU,eAAe;oBAC1B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;wBACjC,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAE,OAAO,CAAE,CAAC,CAAC;oBAC1D,CAAC;gBACL,CAAC;gBACD,KAAK,UAAU,cAAc;oBACzB,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC;aACJ,CAAC;YACF,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC/B,MAAM,CAAE,MAAM,CAAE,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAE,QAAQ,EAAE,CAAE,CAAC,CAAC;gBAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC/B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE,CAAC;gBACxD,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,+CAA+C,CAAC,CAAC;YACxF,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,23 @@
1
+ export function createHttpRequestAttribution() {
2
+ const requests = new Map();
3
+ return {
4
+ remember(identity, scope, request) {
5
+ requests.set(identity, [...requests.get(identity) ?? [], { scope, undiciRequest: request }]);
6
+ },
7
+ take(identity) {
8
+ const pending = requests.get(identity) ?? [];
9
+ const first = pending[0];
10
+ if (first === undefined) {
11
+ return null;
12
+ }
13
+ const ambiguous = pending.some(function differentScope(request) {
14
+ return request.scope !== first.scope;
15
+ });
16
+ requests.set(identity, pending.slice(1).map(function retainedScope(request) {
17
+ return ambiguous ? { scope: null, undiciRequest: null } : request;
18
+ }));
19
+ return ambiguous ? { scope: null, undiciRequest: null } : first;
20
+ }
21
+ };
22
+ }
23
+ //# sourceMappingURL=http-request-attribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-request-attribution.js","sourceRoot":"","sources":["../../../../source/resources/http-request-attribution.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,4BAA4B;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0C,CAAC;IACnE,OAAO;QACH,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO;YAC7B,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,CAAE,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,CAAC,QAAQ;YACT,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,OAAO;gBAC1D,OAAO,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CACR,QAAQ,EACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,aAAa,CAAC,OAAO;gBAC/C,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACtE,CAAC,CAAC,CACL,CAAC;YACF,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACpE,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { createFailureArtifactStream } from "../attachments/failure-artifact-stream.js";
2
+ import { currentResourceFailureContext, attemptFailureContext, transcriptAttempt } from "../attachments/resource-failure-context.js";
3
+ import { observeTranscriptEntries, httpTranscriptArtifactEntry } from "@overkill-dev/simulation/transcript";
4
+ export function observeHttpFailureArtifacts(name, view) {
5
+ const currentContext = currentResourceFailureContext();
6
+ if (currentContext === null) {
7
+ return null;
8
+ }
9
+ const failureContext = currentContext;
10
+ const streams = new Map();
11
+ let failure = null;
12
+ function appendEntry(entry, scope) {
13
+ const identity = transcriptAttempt(scope);
14
+ const owner = identity === null ? failureContext : attemptFailureContext(name, identity.work, identity.attempt);
15
+ const stream = streams.get(scope) ??
16
+ createFailureArtifactStream(owner, 'instrumented', 'http-transcript', 'application/x-ndjson');
17
+ if (stream === null) {
18
+ return;
19
+ }
20
+ streams.set(scope, stream);
21
+ stream.write(`${JSON.stringify(httpTranscriptArtifactEntry(entry))}\n`);
22
+ }
23
+ const stop = observeTranscriptEntries(view, function captureEntry(entry, scope) {
24
+ try {
25
+ appendEntry(entry, scope);
26
+ }
27
+ catch (error) {
28
+ failure = new Error('HTTP transcript capture failed.', { cause: error });
29
+ }
30
+ });
31
+ return {
32
+ async close() {
33
+ stop();
34
+ await Promise.all(Array.from(streams.values(), async function closeHttpCapture(stream) {
35
+ return stream.close();
36
+ }));
37
+ if (failure !== null) {
38
+ throw failure;
39
+ }
40
+ }
41
+ };
42
+ }
43
+ //# sourceMappingURL=local-http-failure-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-http-failure-capture.js","sourceRoot":"","sources":["../../../../source/resources/local-http-failure-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAA8B,MAAM,2CAA2C,CAAC;AACpH,OAAO,EACH,6BAA6B,EAC7B,qBAAqB,EACrB,iBAAiB,EACpB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACH,wBAAwB,EACxB,2BAA2B,EAG9B,MAAM,qCAAkD,CAAC;AAG1D,MAAM,UAAU,2BAA2B,CAAC,IAAY,EAAE,IAA6B;IACnF,MAAM,cAAc,GAAG,6BAA6B,EAAE,CAAC;IACvD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,cAAc,GAAG,cAAc,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiD,CAAC;IACzE,IAAI,OAAO,GAAiB,IAAI,CAAC;IACjC,SAAS,WAAW,CAChB,KAAwD,EACxD,KAA6B;QAE7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B,2BAA2B,CAAC,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;QAClG,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,EAAE,SAAS,YAAY,CAAC,KAAK,EAAE,KAAK;QAC1E,IAAI,CAAC;YACD,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,OAAO,GAAG,IAAI,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO;QACH,KAAK,CAAC,KAAK;YACP,IAAI,EAAE,CAAC;YACP,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,UAAU,gBAAgB,CAAC,MAAM;gBACjF,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC,CAAC;YACJ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACnB,MAAM,OAAO,CAAC;YAClB,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"local-http-service-resource.d.ts","sourceRoot":"","sources":["../../../../source/resources/local-http-service-resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-http-service-resource.d.ts","sourceRoot":"","sources":["../../../../source/resources/local-http-service-resource.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { captureErrorHttpTranscript, emptyTranscriptView } from "@overkill-dev/simulation/transcript";
2
+ import { observeHttpFailureArtifacts } from "./local-http-failure-capture.js";
2
3
  import { defineLocalServiceResource, isProjectedLocalServiceScope } from "./local-service-resource.js";
3
4
  import { observeLocalHttpServer } from "./local-http-transcript-observer.js";
4
5
  function serverEndpoint(server, host) {
@@ -64,8 +65,16 @@ function customTranscript(policy, server) {
64
65
  return captureErrorHttpTranscript(error);
65
66
  }
66
67
  }
68
+ function serviceTranscript(server, baseUrl, policy, scope) {
69
+ if (policy === null) {
70
+ const observer = observeLocalHttpServer(server, baseUrl, scope === 'per-case' ? 'attempt' : 'lifetime');
71
+ return { view: observer.transcript, observer };
72
+ }
73
+ return { view: customTranscript(policy, server), observer: null };
74
+ }
67
75
  function localHttpDefinition(input, policy) {
68
76
  const observers = new WeakMap();
77
+ const captures = new WeakMap();
69
78
  return {
70
79
  name: input.name,
71
80
  scope: input.scope,
@@ -78,14 +87,14 @@ function localHttpDefinition(input, policy) {
78
87
  async ready(server, context) {
79
88
  await listen(server, context.address);
80
89
  const endpoint = serverEndpoint(server, context.address.host);
81
- const baseUrl = `http://${endpoint.host}:${endpoint.port}`;
82
- const transcript = policy === null
83
- ? observeLocalHttpServer(server, baseUrl)
84
- : null;
85
- if (transcript !== null) {
86
- observers.set(server, transcript);
90
+ const { view, observer } = serviceTranscript(server, `http://${endpoint.host}:${endpoint.port}`, policy, input.scope);
91
+ if (observer !== null) {
92
+ observers.set(server, observer);
93
+ }
94
+ const capture = policy?.kind === 'disabled' ? null : observeHttpFailureArtifacts(input.name, view);
95
+ if (capture !== null) {
96
+ captures.set(server, capture);
87
97
  }
88
- const view = transcript?.transcript ?? customTranscript(policy ?? { kind: 'disabled' }, server);
89
98
  return withTranscript(input.handle(localHttpServiceHandle(endpoint, view), server, context), view);
90
99
  },
91
100
  async dispose(server, context) {
@@ -95,6 +104,8 @@ function localHttpDefinition(input, policy) {
95
104
  finally {
96
105
  observers.get(server)?.dispose();
97
106
  observers.delete(server);
107
+ await captures.get(server)?.close();
108
+ captures.delete(server);
98
109
  }
99
110
  await input.dispose(server, context);
100
111
  }