@scoutflo/topology-contracts 0.8.0 → 0.8.1

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 (34) hide show
  1. package/dist/src/correlation/connectionContractV1.d.ts +100 -48
  2. package/dist/src/correlation/connectionContractV1.js +75 -3
  3. package/dist/src/correlation/connectionContractV1.js.map +1 -1
  4. package/dist/src/correlation/contracts/authoring.d.ts +1 -1
  5. package/dist/src/correlation/contracts/authoring.js +16 -5
  6. package/dist/src/correlation/contracts/authoring.js.map +1 -1
  7. package/dist/src/correlation/contracts/families/index.d.ts +39 -31
  8. package/dist/src/correlation/contracts/families/integrations/index.d.ts +39 -31
  9. package/dist/src/correlation/contracts/families/integrations/index.js +39 -36
  10. package/dist/src/correlation/contracts/families/integrations/index.js.map +1 -1
  11. package/dist/src/correlation/contracts/registry.d.ts +39 -31
  12. package/dist/src/index.d.ts +1 -0
  13. package/dist/src/index.js +1 -0
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/investigation/context.d.ts +22185 -798
  16. package/dist/src/investigation/context.js +221 -58
  17. package/dist/src/investigation/context.js.map +1 -1
  18. package/dist/src/provenance/index.d.ts +1 -0
  19. package/dist/src/provenance/index.js +18 -0
  20. package/dist/src/provenance/index.js.map +1 -0
  21. package/dist/src/provenance/runtimeContainer.d.ts +431 -0
  22. package/dist/src/provenance/runtimeContainer.js +139 -0
  23. package/dist/src/provenance/runtimeContainer.js.map +1 -0
  24. package/dist/src/schemas/index.d.ts +2 -1
  25. package/dist/src/schemas/index.js +12 -4
  26. package/dist/src/schemas/index.js.map +1 -1
  27. package/dist/test/contracts.test.js +59 -43
  28. package/dist/test/contracts.test.js.map +1 -1
  29. package/dist/test/investigation-context.test.js +184 -0
  30. package/dist/test/investigation-context.test.js.map +1 -1
  31. package/dist/test/runtime-provenance.test.d.ts +1 -0
  32. package/dist/test/runtime-provenance.test.js +134 -0
  33. package/dist/test/runtime-provenance.test.js.map +1 -0
  34. package/package.json +3 -2
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const node_test_1 = __importDefault(require("node:test"));
8
+ const src_1 = require("../src");
9
+ (0, node_test_1.default)('accepts only credential-free HTTPS source repositories with a path', () => {
10
+ strict_1.default.equal(src_1.safeSourceRepositorySchema.safeParse('https://github.com/example/checkout').success, true);
11
+ for (const repository of [
12
+ 'github.com/example/checkout',
13
+ 'git@github.com:example/checkout.git',
14
+ 'http://github.com/example/checkout',
15
+ 'https://user:token@github.com/example/checkout',
16
+ 'https://github.com/example/checkout?ref=main',
17
+ 'https://github.com/example/checkout#readme',
18
+ 'https://github.com/',
19
+ ]) {
20
+ strict_1.default.equal(src_1.safeSourceRepositorySchema.safeParse(repository).success, false, repository);
21
+ }
22
+ });
23
+ (0, node_test_1.default)('parses immutable observed-vs-claimed provenance for Gateway consumption', () => {
24
+ const parsed = src_1.runtimeWorkloadProvenanceSchema.parse({
25
+ version: src_1.RUNTIME_CONTAINER_PROVENANCE_VERSION,
26
+ containers: [{
27
+ name: 'checkout',
28
+ kind: 'regular',
29
+ scope: { namespace: 'prod', workload_kind: 'Deployment', workload_name: 'checkout' },
30
+ requested_image: 'registry.example/checkout:v2',
31
+ observed_image: 'registry.example/checkout@sha256:abc',
32
+ observed_image_id: 'containerd://sha256:abc',
33
+ digest: `sha256:${'a'.repeat(64)}`,
34
+ runtime_identity_status: 'verified',
35
+ consistency_status: 'consistent',
36
+ claimed_source: {
37
+ repository: 'https://github.com/example/checkout',
38
+ commit_sha: '0123456789abcdef0123456789abcdef01234567',
39
+ scope: 'pod_metadata',
40
+ status: 'unverified',
41
+ reason: 'Pod metadata is a claim and is not runtime verification.',
42
+ },
43
+ }],
44
+ truncated: false,
45
+ });
46
+ strict_1.default.equal(parsed.containers[0]?.digest, `sha256:${'a'.repeat(64)}`);
47
+ strict_1.default.equal(parsed.containers[0]?.claimed_source?.status, 'unverified');
48
+ });
49
+ (0, node_test_1.default)('allows duplicate names across kinds but enforces deterministic ordering', () => {
50
+ strict_1.default.equal(src_1.runtimeWorkloadProvenanceSchema.safeParse({
51
+ version: src_1.RUNTIME_CONTAINER_PROVENANCE_VERSION,
52
+ containers: [
53
+ { name: 'agent', kind: 'regular', runtime_identity_status: 'unavailable', runtime_identity_reason: 'not observed', consistency_status: 'unknown', consistency_reason: 'not compared' },
54
+ { name: 'agent', kind: 'init', runtime_identity_status: 'unavailable', runtime_identity_reason: 'not observed', consistency_status: 'unknown', consistency_reason: 'not compared' },
55
+ ],
56
+ truncated: false,
57
+ }).success, true);
58
+ strict_1.default.equal(src_1.runtimeWorkloadProvenanceSchema.safeParse({
59
+ version: src_1.RUNTIME_CONTAINER_PROVENANCE_VERSION,
60
+ containers: [
61
+ { name: 'agent', kind: 'init', runtime_identity_status: 'unavailable', runtime_identity_reason: 'not observed', consistency_status: 'unknown', consistency_reason: 'not compared' },
62
+ { name: 'agent', kind: 'regular', runtime_identity_status: 'unavailable', runtime_identity_reason: 'not observed', consistency_status: 'unknown', consistency_reason: 'not compared' },
63
+ ],
64
+ truncated: false,
65
+ }).success, false);
66
+ });
67
+ (0, node_test_1.default)('rejects oversized containers and untruthful truncation metadata', () => {
68
+ const container = {
69
+ name: 'agent', kind: 'regular',
70
+ runtime_identity_status: 'unavailable', runtime_identity_reason: 'not observed',
71
+ consistency_status: 'unknown', consistency_reason: 'not compared',
72
+ };
73
+ strict_1.default.equal(src_1.runtimeWorkloadProvenanceSchema.safeParse({
74
+ version: src_1.RUNTIME_CONTAINER_PROVENANCE_VERSION,
75
+ containers: Array.from({ length: 129 }, (_, index) => ({ ...container, name: `agent-${index}` })),
76
+ truncated: true,
77
+ reason: 'container_limit_exceeded',
78
+ containers_omitted: 1,
79
+ }).success, false);
80
+ strict_1.default.equal(src_1.runtimeWorkloadProvenanceSchema.safeParse({
81
+ containers: [],
82
+ truncated: true,
83
+ reason: 'container_limit_exceeded',
84
+ }).success, true);
85
+ const compatibleRawK8sOutput = src_1.runtimeWorkloadProvenanceSchema.parse({
86
+ containers: [],
87
+ truncated: true,
88
+ reason: 'container_limit_exceeded',
89
+ });
90
+ strict_1.default.equal(compatibleRawK8sOutput.version, src_1.RUNTIME_CONTAINER_PROVENANCE_VERSION);
91
+ strict_1.default.equal(src_1.runtimeWorkloadProvenanceSchema.safeParse({
92
+ version: src_1.RUNTIME_CONTAINER_PROVENANCE_VERSION,
93
+ containers: [{
94
+ ...container,
95
+ claimed_source: {
96
+ repository: 'https://github.com/example/checkout',
97
+ commit_sha: 'v2.1.0',
98
+ scope: 'pod_metadata',
99
+ status: 'unverified',
100
+ },
101
+ }],
102
+ truncated: false,
103
+ }).success, false);
104
+ strict_1.default.equal(src_1.runtimeWorkloadProvenanceSchema.safeParse({
105
+ containers: [{
106
+ ...container,
107
+ runtime_identity_status: 'verified',
108
+ digest: 'sha256:not-a-digest',
109
+ }],
110
+ truncated: false,
111
+ }).success, false);
112
+ strict_1.default.equal(src_1.runtimeWorkloadProvenanceSchema.safeParse({
113
+ containers: [{
114
+ ...container,
115
+ claimed_source: {
116
+ repository: 'https://github.com/example/checkout',
117
+ scope: 'pod_metadata',
118
+ status: 'unavailable',
119
+ reason: 'metadata unavailable',
120
+ },
121
+ }],
122
+ truncated: false,
123
+ }).success, false);
124
+ strict_1.default.equal(src_1.runtimeWorkloadProvenanceSchema.safeParse({
125
+ containers: [{
126
+ ...container,
127
+ runtime_identity_status: 'verified',
128
+ runtime_identity_reason: undefined,
129
+ digest: `sha256:${'A'.repeat(64)}`,
130
+ }],
131
+ truncated: false,
132
+ }).success, false);
133
+ });
134
+ //# sourceMappingURL=runtime-provenance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-provenance.test.js","sourceRoot":"","sources":["../../test/runtime-provenance.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scoutflo/topology-contracts",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "Pure shared topology vocabulary and Zod schemas for Scoutflo topology workflows.",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -9,7 +9,8 @@
9
9
  ],
10
10
  "scripts": {
11
11
  "build": "tsc -p tsconfig.json",
12
- "test": "npm run build && node --test dist/test/*.test.js"
12
+ "test": "npm run build && node --test dist/test/*.test.js && node scripts/verify-packed-exports.cjs",
13
+ "prepack": "npm run build"
13
14
  },
14
15
  "keywords": [
15
16
  "scoutflo",