@scoutflo/topology-contracts 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/src/correlation/connectionContractV1.d.ts +100 -48
- package/dist/src/correlation/connectionContractV1.js +75 -3
- package/dist/src/correlation/connectionContractV1.js.map +1 -1
- package/dist/src/correlation/contracts/authoring.d.ts +1 -1
- package/dist/src/correlation/contracts/authoring.js +16 -5
- package/dist/src/correlation/contracts/authoring.js.map +1 -1
- package/dist/src/correlation/contracts/families/index.d.ts +39 -31
- package/dist/src/correlation/contracts/families/integrations/index.d.ts +39 -31
- package/dist/src/correlation/contracts/families/integrations/index.js +39 -36
- package/dist/src/correlation/contracts/families/integrations/index.js.map +1 -1
- package/dist/src/correlation/contracts/registry.d.ts +39 -31
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/investigation/context.d.ts +22185 -798
- package/dist/src/investigation/context.js +221 -58
- package/dist/src/investigation/context.js.map +1 -1
- package/dist/src/product-identity.d.ts +30 -0
- package/dist/src/product-identity.js +128 -0
- package/dist/src/product-identity.js.map +1 -0
- package/dist/src/provenance/index.d.ts +1 -0
- package/dist/src/provenance/index.js +18 -0
- package/dist/src/provenance/index.js.map +1 -0
- package/dist/src/provenance/runtimeContainer.d.ts +431 -0
- package/dist/src/provenance/runtimeContainer.js +139 -0
- package/dist/src/provenance/runtimeContainer.js.map +1 -0
- package/dist/src/schemas/index.d.ts +2 -1
- package/dist/src/schemas/index.js +12 -4
- package/dist/src/schemas/index.js.map +1 -1
- package/dist/test/contracts.test.js +59 -43
- package/dist/test/contracts.test.js.map +1 -1
- package/dist/test/investigation-context.test.js +184 -0
- package/dist/test/investigation-context.test.js.map +1 -1
- package/dist/test/product-identity.test.d.ts +1 -0
- package/dist/test/product-identity.test.js +103 -0
- package/dist/test/product-identity.test.js.map +1 -0
- package/dist/test/runtime-provenance.test.d.ts +1 -0
- package/dist/test/runtime-provenance.test.js +134 -0
- package/dist/test/runtime-provenance.test.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,103 @@
|
|
|
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 product_identity_1 = require("../src/product-identity");
|
|
9
|
+
const scope = {
|
|
10
|
+
account_key: 'acme.example',
|
|
11
|
+
integration_id: 'integration-42',
|
|
12
|
+
};
|
|
13
|
+
(0, node_test_1.default)('normalizes Jira and JSM project keys while preserving raw evidence and scope', () => {
|
|
14
|
+
for (const provider of ['jira', 'jsm']) {
|
|
15
|
+
strict_1.default.deepEqual((0, product_identity_1.normalizeProviderProductKey)({
|
|
16
|
+
provider,
|
|
17
|
+
raw_value: ' https://acme.atlassian.net/browse/ PAY-123?focusedCommentId=9 ',
|
|
18
|
+
...scope,
|
|
19
|
+
}), {
|
|
20
|
+
version: 'provider-product-key.v1',
|
|
21
|
+
provider,
|
|
22
|
+
raw_value: ' https://acme.atlassian.net/browse/ PAY-123?focusedCommentId=9 ',
|
|
23
|
+
canonical_key: 'pay',
|
|
24
|
+
account_key: 'acme.example',
|
|
25
|
+
integration_id: 'integration-42',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
(0, node_test_1.default)('normalizes Confluence URL-derived Unicode space keys deterministically', () => {
|
|
30
|
+
strict_1.default.equal((0, product_identity_1.normalizeProviderProductKey)({
|
|
31
|
+
provider: 'confluence',
|
|
32
|
+
raw_value: 'https://acme.atlassian.net/wiki/spaces/Platform%20Caf%C3%A9/pages/123',
|
|
33
|
+
...scope,
|
|
34
|
+
})?.canonical_key, 'platform-café');
|
|
35
|
+
});
|
|
36
|
+
(0, node_test_1.default)('normalizes Sentry project slugs without collapsing project scope', () => {
|
|
37
|
+
strict_1.default.deepEqual((0, product_identity_1.normalizeProviderProductKey)({
|
|
38
|
+
provider: 'sentry',
|
|
39
|
+
raw_value: ' HTTPS://sentry.io/organizations/acme/issues/?project=Payments_API ',
|
|
40
|
+
project_id: '4500123',
|
|
41
|
+
...scope,
|
|
42
|
+
}), {
|
|
43
|
+
version: 'provider-product-key.v1',
|
|
44
|
+
provider: 'sentry',
|
|
45
|
+
raw_value: ' HTTPS://sentry.io/organizations/acme/issues/?project=Payments_API ',
|
|
46
|
+
canonical_key: 'payments-api',
|
|
47
|
+
account_key: 'acme.example',
|
|
48
|
+
integration_id: 'integration-42',
|
|
49
|
+
project_id: '4500123',
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
(0, node_test_1.default)('rejects unsupported providers and unbounded or empty keys', () => {
|
|
53
|
+
strict_1.default.equal((0, product_identity_1.normalizeProviderProductKey)({ provider: 'github', raw_value: 'repo', ...scope }), undefined);
|
|
54
|
+
strict_1.default.equal((0, product_identity_1.normalizeProviderProductKey)({ provider: 'sentry', raw_value: ' '.repeat(3), ...scope }), undefined);
|
|
55
|
+
strict_1.default.equal((0, product_identity_1.normalizeProviderProductKey)({ provider: 'sentry', raw_value: 'x'.repeat(513), ...scope }), undefined);
|
|
56
|
+
});
|
|
57
|
+
(0, node_test_1.default)('keeps identical canonical keys distinct through required provider scope', () => {
|
|
58
|
+
const first = (0, product_identity_1.normalizeProviderProductKey)({
|
|
59
|
+
provider: 'sentry',
|
|
60
|
+
raw_value: 'Payments API',
|
|
61
|
+
account_key: 'account-a',
|
|
62
|
+
integration_id: 'integration-a',
|
|
63
|
+
project_id: '1',
|
|
64
|
+
});
|
|
65
|
+
const second = (0, product_identity_1.normalizeProviderProductKey)({
|
|
66
|
+
provider: 'sentry',
|
|
67
|
+
raw_value: 'payments-api',
|
|
68
|
+
account_key: 'account-b',
|
|
69
|
+
integration_id: 'integration-b',
|
|
70
|
+
project_id: '2',
|
|
71
|
+
});
|
|
72
|
+
strict_1.default.equal(first?.canonical_key, second?.canonical_key);
|
|
73
|
+
strict_1.default.notDeepEqual(first, second);
|
|
74
|
+
});
|
|
75
|
+
(0, node_test_1.default)('parses bounded semantic versions and named releases into structured claims', () => {
|
|
76
|
+
strict_1.default.deepEqual((0, product_identity_1.parseSentryReleaseClaim)('payments-api@1.24.3+build.7'), {
|
|
77
|
+
version: 'sentry-release-claim.v1',
|
|
78
|
+
raw_value: 'payments-api@1.24.3+build.7',
|
|
79
|
+
release_name: 'payments-api',
|
|
80
|
+
semantic_version: '1.24.3+build.7',
|
|
81
|
+
immutable_revision: false,
|
|
82
|
+
});
|
|
83
|
+
strict_1.default.deepEqual((0, product_identity_1.parseSentryReleaseClaim)('v2.0.1-rc.2'), {
|
|
84
|
+
version: 'sentry-release-claim.v1',
|
|
85
|
+
raw_value: 'v2.0.1-rc.2',
|
|
86
|
+
semantic_version: '2.0.1-rc.2',
|
|
87
|
+
immutable_revision: false,
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
(0, node_test_1.default)('accepts only full commit SHAs as immutable Sentry release evidence', () => {
|
|
91
|
+
const sha = '0123456789abcdef0123456789abcdef01234567';
|
|
92
|
+
strict_1.default.deepEqual((0, product_identity_1.parseSentryReleaseClaim)(sha), {
|
|
93
|
+
version: 'sentry-release-claim.v1',
|
|
94
|
+
raw_value: sha,
|
|
95
|
+
revision: sha,
|
|
96
|
+
immutable_revision: true,
|
|
97
|
+
});
|
|
98
|
+
strict_1.default.equal((0, product_identity_1.parseSentryReleaseClaim)('main')?.immutable_revision, false);
|
|
99
|
+
strict_1.default.equal((0, product_identity_1.parseSentryReleaseClaim)('v1.2')?.immutable_revision, false);
|
|
100
|
+
strict_1.default.equal((0, product_identity_1.parseSentryReleaseClaim)('0123456789ab')?.immutable_revision, false);
|
|
101
|
+
strict_1.default.equal((0, product_identity_1.parseSentryReleaseClaim)('x'.repeat(257)), undefined);
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=product-identity.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-identity.test.js","sourceRoot":"","sources":["../../test/product-identity.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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.
|
|
3
|
+
"version": "0.9.0",
|
|
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",
|