@claude-flow/security 3.0.0-alpha.8 → 3.0.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/dist/CVE-REMEDIATION.d.ts +17 -6
- package/dist/CVE-REMEDIATION.d.ts.map +1 -1
- package/dist/CVE-REMEDIATION.js +328 -12
- package/dist/CVE-REMEDIATION.js.map +1 -1
- package/dist/authorization/propagator.d.ts +148 -0
- package/dist/authorization/propagator.d.ts.map +1 -0
- package/dist/authorization/propagator.js +182 -0
- package/dist/authorization/propagator.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -1
- package/dist/keychain-adapter.d.ts +48 -0
- package/dist/keychain-adapter.d.ts.map +1 -0
- package/dist/keychain-adapter.js +0 -0
- package/dist/keychain-adapter.js.map +1 -0
- package/dist/mcp-caller-identity.d.ts +101 -0
- package/dist/mcp-caller-identity.d.ts.map +1 -0
- package/dist/mcp-caller-identity.js +0 -0
- package/dist/mcp-caller-identity.js.map +1 -0
- package/dist/mcp-composition-inspector.d.ts +133 -0
- package/dist/mcp-composition-inspector.d.ts.map +1 -0
- package/dist/mcp-composition-inspector.js +254 -0
- package/dist/mcp-composition-inspector.js.map +1 -0
- package/dist/oauth/browser.d.ts +31 -0
- package/dist/oauth/browser.d.ts.map +1 -0
- package/dist/oauth/browser.js +55 -0
- package/dist/oauth/browser.js.map +1 -0
- package/dist/oauth/callback-server.d.ts +37 -0
- package/dist/oauth/callback-server.d.ts.map +1 -0
- package/dist/oauth/callback-server.js +86 -0
- package/dist/oauth/callback-server.js.map +1 -0
- package/dist/oauth/client.d.ts +57 -0
- package/dist/oauth/client.d.ts.map +1 -0
- package/dist/oauth/client.js +120 -0
- package/dist/oauth/client.js.map +1 -0
- package/dist/oauth/pkce.d.ts +25 -0
- package/dist/oauth/pkce.d.ts.map +1 -0
- package/dist/oauth/pkce.js +36 -0
- package/dist/oauth/pkce.js.map +1 -0
- package/dist/path-validator.d.ts +23 -0
- package/dist/path-validator.d.ts.map +1 -1
- package/dist/path-validator.js +128 -5
- package/dist/path-validator.js.map +1 -1
- package/dist/plugins/integrity-verifier.d.ts +125 -0
- package/dist/plugins/integrity-verifier.d.ts.map +1 -0
- package/dist/plugins/integrity-verifier.js +186 -0
- package/dist/plugins/integrity-verifier.js.map +1 -0
- package/dist/policy/canonical.d.ts +5 -0
- package/dist/policy/canonical.d.ts.map +1 -0
- package/dist/policy/canonical.js +30 -0
- package/dist/policy/canonical.js.map +1 -0
- package/dist/policy/engine.d.ts +34 -0
- package/dist/policy/engine.d.ts.map +1 -0
- package/dist/policy/engine.js +285 -0
- package/dist/policy/engine.js.map +1 -0
- package/dist/policy/envelope.d.ts +9 -0
- package/dist/policy/envelope.d.ts.map +1 -0
- package/dist/policy/envelope.js +90 -0
- package/dist/policy/envelope.js.map +1 -0
- package/dist/policy/evaluator.d.ts +4 -0
- package/dist/policy/evaluator.d.ts.map +1 -0
- package/dist/policy/evaluator.js +119 -0
- package/dist/policy/evaluator.js.map +1 -0
- package/dist/policy/index.d.ts +7 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +7 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/product-plane.d.ts +238 -0
- package/dist/policy/product-plane.d.ts.map +1 -0
- package/dist/policy/product-plane.js +1022 -0
- package/dist/policy/product-plane.js.map +1 -0
- package/dist/policy/types.d.ts +169 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +2 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/safe-git.d.ts +22 -0
- package/dist/safe-git.d.ts.map +1 -0
- package/dist/safe-git.js +63 -0
- package/dist/safe-git.js.map +1 -0
- package/dist/tool-output-guardrail.d.ts +126 -0
- package/dist/tool-output-guardrail.d.ts.map +1 -0
- package/dist/tool-output-guardrail.js +257 -0
- package/dist/tool-output-guardrail.js.map +1 -0
- package/package.json +17 -5
- package/__tests__/acceptance/security-compliance.test.ts +0 -674
- package/__tests__/credential-generator.test.ts +0 -310
- package/__tests__/fixtures/configurations.ts +0 -425
- package/__tests__/fixtures/index.ts +0 -21
- package/__tests__/helpers/create-mock.ts +0 -469
- package/__tests__/helpers/index.ts +0 -32
- package/__tests__/input-validator.test.ts +0 -382
- package/__tests__/integration/security-flow.test.ts +0 -606
- package/__tests__/password-hasher.test.ts +0 -239
- package/__tests__/path-validator.test.ts +0 -302
- package/__tests__/safe-executor.test.ts +0 -292
- package/__tests__/token-generator.test.ts +0 -371
- package/__tests__/unit/credential-generator.test.ts +0 -182
- package/__tests__/unit/password-hasher.test.ts +0 -359
- package/__tests__/unit/path-validator.test.ts +0 -509
- package/__tests__/unit/safe-executor.test.ts +0 -667
- package/__tests__/unit/token-generator.test.ts +0 -310
- package/ruvector.db +0 -0
- package/src/CVE-REMEDIATION.ts +0 -251
- package/src/application/index.ts +0 -10
- package/src/application/services/security-application-service.ts +0 -193
- package/src/credential-generator.ts +0 -368
- package/src/domain/entities/security-context.ts +0 -173
- package/src/domain/index.ts +0 -17
- package/src/domain/services/security-domain-service.ts +0 -296
- package/src/index.ts +0 -271
- package/src/input-validator.ts +0 -466
- package/src/password-hasher.ts +0 -277
- package/src/path-validator.ts +0 -525
- package/src/safe-executor.ts +0 -546
- package/src/token-generator.ts +0 -463
- package/tmp.json +0 -0
- package/tsconfig.json +0 -9
- package/tsconfig.tsbuildinfo +0 -1
- package/vitest.config.ts +0 -20
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
function matches(patterns, value) {
|
|
2
|
+
if (!patterns?.length)
|
|
3
|
+
return true;
|
|
4
|
+
if (!value)
|
|
5
|
+
return false;
|
|
6
|
+
return patterns.some((pattern) => (pattern === '*'
|
|
7
|
+
|| pattern === value
|
|
8
|
+
|| (pattern.endsWith('*') && value.startsWith(pattern.slice(0, -1)))));
|
|
9
|
+
}
|
|
10
|
+
function subset(child, parent) {
|
|
11
|
+
if (!parent?.length)
|
|
12
|
+
return true;
|
|
13
|
+
if (!child?.length)
|
|
14
|
+
return false;
|
|
15
|
+
return child.every((value) => matches(parent, value));
|
|
16
|
+
}
|
|
17
|
+
export function checkCapabilityEnvelope(action, envelope, now = Date.now()) {
|
|
18
|
+
if (!envelope)
|
|
19
|
+
return { allowed: true };
|
|
20
|
+
if (envelope.expiresAt !== undefined && envelope.expiresAt <= now) {
|
|
21
|
+
return { allowed: false, reason: 'capability-envelope-expired' };
|
|
22
|
+
}
|
|
23
|
+
const checks = [
|
|
24
|
+
[matches(envelope.actions, action.type), 'action-outside-envelope'],
|
|
25
|
+
[matches(envelope.resources, action.resource), 'resource-outside-envelope'],
|
|
26
|
+
[matches(envelope.tools, action.tool), 'tool-outside-envelope'],
|
|
27
|
+
[matches(envelope.servers, action.server), 'server-outside-envelope'],
|
|
28
|
+
[matches(envelope.environments, action.environment), 'environment-outside-envelope'],
|
|
29
|
+
];
|
|
30
|
+
if (action.namespace) {
|
|
31
|
+
const namespaces = action.type.includes('read')
|
|
32
|
+
? envelope.readNamespaces
|
|
33
|
+
: envelope.writeNamespaces;
|
|
34
|
+
checks.push([matches(namespaces, action.namespace), 'namespace-outside-envelope']);
|
|
35
|
+
}
|
|
36
|
+
if (action.costUsd !== undefined && envelope.maxCostUsd !== undefined) {
|
|
37
|
+
checks.push([action.costUsd <= envelope.maxCostUsd, 'cost-outside-envelope']);
|
|
38
|
+
}
|
|
39
|
+
if (action.tokens !== undefined && envelope.maxTokens !== undefined) {
|
|
40
|
+
checks.push([action.tokens <= envelope.maxTokens, 'tokens-outside-envelope']);
|
|
41
|
+
}
|
|
42
|
+
if (action.concurrency !== undefined && envelope.maxConcurrency !== undefined) {
|
|
43
|
+
checks.push([action.concurrency <= envelope.maxConcurrency, 'concurrency-outside-envelope']);
|
|
44
|
+
}
|
|
45
|
+
if (action.network === true)
|
|
46
|
+
checks.push([envelope.network === true, 'network-outside-envelope']);
|
|
47
|
+
if (action.destructive === true)
|
|
48
|
+
checks.push([envelope.destructive === true, 'destructive-outside-envelope']);
|
|
49
|
+
const failed = checks.find(([allowed]) => !allowed);
|
|
50
|
+
return failed ? { allowed: false, reason: failed[1] } : { allowed: true };
|
|
51
|
+
}
|
|
52
|
+
export function isEnvelopeReduction(parent, child) {
|
|
53
|
+
const listChecks = [
|
|
54
|
+
subset(child.actions, parent.actions),
|
|
55
|
+
subset(child.resources, parent.resources),
|
|
56
|
+
subset(child.tools, parent.tools),
|
|
57
|
+
subset(child.servers, parent.servers),
|
|
58
|
+
subset(child.readNamespaces, parent.readNamespaces),
|
|
59
|
+
subset(child.writeNamespaces, parent.writeNamespaces),
|
|
60
|
+
subset(child.environments, parent.environments),
|
|
61
|
+
];
|
|
62
|
+
const numericChecks = [
|
|
63
|
+
[child.maxCostUsd, parent.maxCostUsd],
|
|
64
|
+
[child.maxTokens, parent.maxTokens],
|
|
65
|
+
[child.maxConcurrency, parent.maxConcurrency],
|
|
66
|
+
[child.delegationDepth, parent.delegationDepth],
|
|
67
|
+
[child.expiresAt, parent.expiresAt],
|
|
68
|
+
];
|
|
69
|
+
return listChecks.every(Boolean)
|
|
70
|
+
&& numericChecks.every(([next, current]) => (current === undefined
|
|
71
|
+
? true
|
|
72
|
+
: next !== undefined && next <= current))
|
|
73
|
+
&& !(child.network === true && parent.network !== true)
|
|
74
|
+
&& !(child.destructive === true && parent.destructive !== true);
|
|
75
|
+
}
|
|
76
|
+
export function delegateEnvelope(parent, child) {
|
|
77
|
+
if ((parent.delegationDepth ?? 0) <= 0) {
|
|
78
|
+
throw new Error('delegation-depth-exhausted');
|
|
79
|
+
}
|
|
80
|
+
const reduced = {
|
|
81
|
+
...parent,
|
|
82
|
+
...child,
|
|
83
|
+
delegationDepth: Math.min(child.delegationDepth ?? Number.MAX_SAFE_INTEGER, (parent.delegationDepth ?? 0) - 1),
|
|
84
|
+
expiresAt: Math.min(child.expiresAt ?? Number.MAX_SAFE_INTEGER, parent.expiresAt ?? Number.MAX_SAFE_INTEGER),
|
|
85
|
+
};
|
|
86
|
+
if (!isEnvelopeReduction(parent, reduced))
|
|
87
|
+
throw new Error('capability-envelope-cannot-grow');
|
|
88
|
+
return reduced;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/policy/envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PolicyDecision, PolicyMode, PolicyRequest, PolicyRule } from './types.js';
|
|
2
|
+
export declare function ruleMatches(rule: PolicyRule, request: PolicyRequest): boolean;
|
|
3
|
+
export declare function evaluatePolicy(request: PolicyRequest, rules: readonly PolicyRule[], mode: PolicyMode, verifiedEvidenceIds?: readonly string[]): Omit<PolicyDecision, 'receiptId'>;
|
|
4
|
+
//# sourceMappingURL=evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/policy/evaluator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EACd,UAAU,EACV,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AA0CpB,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAU7E;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,IAAI,EAAE,UAAU,EAChB,mBAAmB,GAAE,SAAS,MAAM,EAAO,GAC1C,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CA+DnC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { checkCapabilityEnvelope } from './envelope.js';
|
|
2
|
+
function matches(patterns, value) {
|
|
3
|
+
if (!patterns?.length)
|
|
4
|
+
return true;
|
|
5
|
+
if (!value)
|
|
6
|
+
return false;
|
|
7
|
+
return patterns.some((pattern) => (pattern === '*'
|
|
8
|
+
|| pattern === value
|
|
9
|
+
|| (pattern.endsWith('*') && value.startsWith(pattern.slice(0, -1)))));
|
|
10
|
+
}
|
|
11
|
+
function constraintsPass(request, constraints) {
|
|
12
|
+
if (!constraints)
|
|
13
|
+
return true;
|
|
14
|
+
const { action } = request;
|
|
15
|
+
const evidence = request.context?.evidence ?? [];
|
|
16
|
+
const verifiedIds = new Set(request.context?.metadata?.verifiedEvidenceIds instanceof Array
|
|
17
|
+
? request.context.metadata.verifiedEvidenceIds
|
|
18
|
+
: []);
|
|
19
|
+
const verifiedEvidence = evidence.filter((item) => item.id && verifiedIds.has(item.id));
|
|
20
|
+
if (constraints.maxCostUsd !== undefined
|
|
21
|
+
&& (action.costUsd === undefined || action.costUsd > constraints.maxCostUsd))
|
|
22
|
+
return false;
|
|
23
|
+
if (constraints.maxTokens !== undefined
|
|
24
|
+
&& (action.tokens === undefined || action.tokens > constraints.maxTokens))
|
|
25
|
+
return false;
|
|
26
|
+
if (constraints.maxConcurrency !== undefined
|
|
27
|
+
&& (action.concurrency === undefined || action.concurrency > constraints.maxConcurrency))
|
|
28
|
+
return false;
|
|
29
|
+
if (constraints.network === false && action.network === true)
|
|
30
|
+
return false;
|
|
31
|
+
if (constraints.destructive === false && action.destructive === true)
|
|
32
|
+
return false;
|
|
33
|
+
if (constraints.allowedNamespaces?.length && !matches(constraints.allowedNamespaces, action.namespace))
|
|
34
|
+
return false;
|
|
35
|
+
// Signature verification is performed by the engine's trusted verifier.
|
|
36
|
+
// A caller-authored `signed: true` flag is deliberately ignored.
|
|
37
|
+
if (constraints.requireSignedEvidence && verifiedEvidence.length === 0)
|
|
38
|
+
return false;
|
|
39
|
+
if (constraints.requiredProvenance?.length) {
|
|
40
|
+
const relevant = constraints.requireSignedEvidence ? verifiedEvidence : evidence;
|
|
41
|
+
const available = new Set(relevant.map((item) => item.provenance));
|
|
42
|
+
if (!constraints.requiredProvenance.every((type) => available.has(type)))
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
export function ruleMatches(rule, request) {
|
|
48
|
+
if (rule.enabled === false)
|
|
49
|
+
return false;
|
|
50
|
+
const { identity, action } = request;
|
|
51
|
+
return matches(rule.actions, action.type)
|
|
52
|
+
&& matches(rule.resources, action.resource)
|
|
53
|
+
&& matches(rule.principals, identity.id)
|
|
54
|
+
&& (!rule.identityTypes?.length || rule.identityTypes.includes(identity.type))
|
|
55
|
+
&& (!rule.roles?.length || rule.roles.some((role) => identity.roles?.includes(role)))
|
|
56
|
+
&& matches(rule.environments, action.environment)
|
|
57
|
+
&& constraintsPass(request, rule.constraints);
|
|
58
|
+
}
|
|
59
|
+
export function evaluatePolicy(request, rules, mode, verifiedEvidenceIds = []) {
|
|
60
|
+
const requestId = request.requestId ?? crypto.randomUUID();
|
|
61
|
+
const envelope = checkCapabilityEnvelope(request.action, request.context?.envelope, request.context?.now);
|
|
62
|
+
if (!envelope.allowed) {
|
|
63
|
+
return {
|
|
64
|
+
requestId,
|
|
65
|
+
outcome: 'denied',
|
|
66
|
+
// A capability envelope is delegated authority, not an observation-mode
|
|
67
|
+
// rule. Crossing it is always blocked, including legacy installations.
|
|
68
|
+
enforcedOutcome: 'denied',
|
|
69
|
+
mode,
|
|
70
|
+
reason: envelope.reason ?? 'capability-envelope-denied',
|
|
71
|
+
matchedRules: [],
|
|
72
|
+
obligations: [],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const verifiedRequest = {
|
|
76
|
+
...request,
|
|
77
|
+
context: {
|
|
78
|
+
...request.context,
|
|
79
|
+
metadata: {
|
|
80
|
+
...request.context?.metadata,
|
|
81
|
+
verifiedEvidenceIds: [...verifiedEvidenceIds],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
const matched = rules
|
|
86
|
+
.filter((rule) => ruleMatches(rule, verifiedRequest))
|
|
87
|
+
.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0) || a.id.localeCompare(b.id));
|
|
88
|
+
const deny = matched.find((rule) => rule.effect === 'deny');
|
|
89
|
+
const approval = matched.find((rule) => rule.effect === 'require_approval');
|
|
90
|
+
const allow = matched.find((rule) => rule.effect === 'allow');
|
|
91
|
+
let outcome;
|
|
92
|
+
let reason;
|
|
93
|
+
if (deny) {
|
|
94
|
+
outcome = 'denied';
|
|
95
|
+
reason = `denied-by:${deny.id}`;
|
|
96
|
+
}
|
|
97
|
+
else if (approval) {
|
|
98
|
+
outcome = 'approval_required';
|
|
99
|
+
reason = `approval-required-by:${approval.id}`;
|
|
100
|
+
}
|
|
101
|
+
else if (allow) {
|
|
102
|
+
outcome = 'allowed';
|
|
103
|
+
reason = `allowed-by:${allow.id}`;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
outcome = mode === 'legacy' ? 'allowed' : 'denied';
|
|
107
|
+
reason = mode === 'legacy' ? 'legacy-default-allow' : 'default-deny';
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
requestId,
|
|
111
|
+
outcome,
|
|
112
|
+
enforcedOutcome: mode === 'enforce' ? outcome : 'allowed',
|
|
113
|
+
mode,
|
|
114
|
+
reason,
|
|
115
|
+
matchedRules: matched.map((rule) => rule.id),
|
|
116
|
+
obligations: approval ? ['valid-human-approval'] : [],
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/policy/evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cognitum product-plane claim federation primitives.
|
|
3
|
+
*
|
|
4
|
+
* This module intentionally contains no grant-verification or domain mutation
|
|
5
|
+
* logic. It validates the portable, reference-only envelope that a local
|
|
6
|
+
* policy enforcement point can evaluate before consulting its authoritative
|
|
7
|
+
* identity, tenancy, and permission stores.
|
|
8
|
+
*/
|
|
9
|
+
import { type KeyLike } from 'node:crypto';
|
|
10
|
+
export declare const PRODUCT_ACTION_ENVELOPE_VERSION: "cognitum.action.v1";
|
|
11
|
+
export declare const PRODUCT_ACTIONS: readonly ["dashboard.read", "dashboard.status.read", "inference.invoke", "inference.stream", "usage.read", "pod.spawn", "benchmark.run", "evolution.propose", "evolution.promote", "comms.thread.read", "comms.thread.post", "comms.projection.read", "comms.board.admin", "cog.proposal.create", "cog.proposal.review", "cog.proposal.approve", "cog.instance.acquire", "cog.instance.operate", "cog.deploy", "cog.rollback", "ruview.space.read", "ruview.semantic.publish", "ruview.automation.propose", "ruview.automation.approve", "ruview.device.command", "cognition.route", "cognition.critique", "memory.recall", "memory.propose", "evidence.read", "memory.commit-validated"];
|
|
12
|
+
export type ProductAction = (typeof PRODUCT_ACTIONS)[number];
|
|
13
|
+
export declare const PRODUCT_AUTHORITIES: readonly ["cognitum.control-plane", "cognitum.cog", "meta-llm", "comms", "agentbbs", "ruview.edge", "ruflo.policy", "ruflo.memory"];
|
|
14
|
+
export type ProductAuthority = (typeof PRODUCT_AUTHORITIES)[number];
|
|
15
|
+
export declare const IDENTITY_NAMESPACES: readonly ["cognitum-principal", "firebase-subject", "meta-llm-account", "agentbbs-public-key", "workload", "ruflo-agent", "legacy-principal"];
|
|
16
|
+
export type IdentityNamespace = (typeof IDENTITY_NAMESPACES)[number];
|
|
17
|
+
export declare const TENANT_NAMESPACES: readonly ["cognitum-tenant", "meta-llm-account", "meta-llm-sub-tenant", "comms-tenant", "agentbbs-board", "ruview-space"];
|
|
18
|
+
export type TenantNamespace = (typeof TENANT_NAMESPACES)[number];
|
|
19
|
+
export type PrivacyClass = 'P0' | 'P1' | 'P2' | 'P3';
|
|
20
|
+
export interface NamespacedIdentity {
|
|
21
|
+
namespace: IdentityNamespace;
|
|
22
|
+
id: string;
|
|
23
|
+
}
|
|
24
|
+
export interface NamespacedTenantRef {
|
|
25
|
+
namespace: TenantNamespace;
|
|
26
|
+
id: string;
|
|
27
|
+
}
|
|
28
|
+
export interface AuthoritativeReference {
|
|
29
|
+
authority: ProductAuthority;
|
|
30
|
+
tenantRef: NamespacedTenantRef;
|
|
31
|
+
/**
|
|
32
|
+
* Authority-qualified record kind, for example
|
|
33
|
+
* `meta-llm/inference` or `ruview.edge/semantic-observation`.
|
|
34
|
+
*/
|
|
35
|
+
sourceType: string;
|
|
36
|
+
sourceId: string;
|
|
37
|
+
sourceVersion: string;
|
|
38
|
+
sourceDigest: `sha256:${string}`;
|
|
39
|
+
}
|
|
40
|
+
export interface ProductActionEnvelopeV1 {
|
|
41
|
+
schemaVersion: typeof PRODUCT_ACTION_ENVELOPE_VERSION;
|
|
42
|
+
eventId: string;
|
|
43
|
+
issuer: ProductAuthority;
|
|
44
|
+
audience: ProductAuthority;
|
|
45
|
+
subject: NamespacedIdentity;
|
|
46
|
+
actor?: NamespacedIdentity;
|
|
47
|
+
tenantRef: NamespacedTenantRef;
|
|
48
|
+
action: ProductAction;
|
|
49
|
+
resourceRefs: string[];
|
|
50
|
+
requestDigest?: `sha256:${string}`;
|
|
51
|
+
contentDigest?: `sha256:${string}`;
|
|
52
|
+
idempotencyKey?: string;
|
|
53
|
+
correlationId: string;
|
|
54
|
+
causationId?: string;
|
|
55
|
+
authoritativeSource: AuthoritativeReference;
|
|
56
|
+
sequence?: string;
|
|
57
|
+
policyReceiptId: string;
|
|
58
|
+
capabilityId?: string;
|
|
59
|
+
validationReceiptId?: string;
|
|
60
|
+
occurredAt: string;
|
|
61
|
+
expiresAt?: string;
|
|
62
|
+
privacyClass: PrivacyClass;
|
|
63
|
+
}
|
|
64
|
+
export type AvailabilityCheck = 'yes' | 'no' | 'unknown';
|
|
65
|
+
export type IdentityAvailability = 'verified' | 'unverified' | 'invalid' | 'unknown';
|
|
66
|
+
/**
|
|
67
|
+
* Independent integration-health dimensions. In particular, an authorized
|
|
68
|
+
* claim changes only `authorized`; it does not imply configuration,
|
|
69
|
+
* reachability, service health, or verified browser/workload identity.
|
|
70
|
+
*/
|
|
71
|
+
export interface ProductAvailabilityDimensions {
|
|
72
|
+
identity: IdentityAvailability;
|
|
73
|
+
configured: AvailabilityCheck;
|
|
74
|
+
reachable: AvailabilityCheck;
|
|
75
|
+
healthy: AvailabilityCheck;
|
|
76
|
+
authorized: AvailabilityCheck;
|
|
77
|
+
}
|
|
78
|
+
export type ProductAvailability = 'available' | 'degraded' | 'blocked' | 'unavailable';
|
|
79
|
+
export declare function classifyProductAvailability(dimensions: ProductAvailabilityDimensions): ProductAvailability;
|
|
80
|
+
export interface RuViewSemanticObservationV1 {
|
|
81
|
+
schemaVersion: 'ruview.semantic-observation.v1';
|
|
82
|
+
spaceRef: NamespacedTenantRef & {
|
|
83
|
+
namespace: 'ruview-space';
|
|
84
|
+
};
|
|
85
|
+
observationType: string;
|
|
86
|
+
/**
|
|
87
|
+
* Privacy-minimized semantic data only. Binary values, arrays, and raw
|
|
88
|
+
* sensing field names are rejected by the wire validator.
|
|
89
|
+
*/
|
|
90
|
+
value: Record<string, string | number | boolean | null>;
|
|
91
|
+
confidence: number;
|
|
92
|
+
uncertainty?: number;
|
|
93
|
+
abstained: boolean;
|
|
94
|
+
modelDigest: `sha256:${string}`;
|
|
95
|
+
calibrationDigest?: `sha256:${string}`;
|
|
96
|
+
hardwareRef?: string;
|
|
97
|
+
privacyClass: 'P2' | 'P3';
|
|
98
|
+
observedAt: string;
|
|
99
|
+
expiresAt: string;
|
|
100
|
+
/** Canonical unsigned decimal string; JSON cannot safely carry bigint. */
|
|
101
|
+
sequence: string;
|
|
102
|
+
}
|
|
103
|
+
export interface ValidationIssue {
|
|
104
|
+
path: string;
|
|
105
|
+
code: 'invalid_type' | 'missing' | 'unknown_field' | 'unsupported_value' | 'invalid_format' | 'invalid_authority' | 'identity_namespace_required' | 'tenant_mismatch' | 'privacy_ceiling_exceeded';
|
|
106
|
+
message: string;
|
|
107
|
+
}
|
|
108
|
+
export type ValidationResult<T> = {
|
|
109
|
+
ok: true;
|
|
110
|
+
value: T;
|
|
111
|
+
} | {
|
|
112
|
+
ok: false;
|
|
113
|
+
issues: ValidationIssue[];
|
|
114
|
+
};
|
|
115
|
+
export interface ProductActionRequirements {
|
|
116
|
+
requestDigest: boolean;
|
|
117
|
+
contentDigest: boolean;
|
|
118
|
+
idempotencyKey: boolean;
|
|
119
|
+
expiry: boolean;
|
|
120
|
+
capability: boolean;
|
|
121
|
+
validationReceipt: boolean;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Actions must be anchored in the product that owns their authoritative
|
|
125
|
+
* outcome. Read-model actions permit the explicitly listed source domains.
|
|
126
|
+
*/
|
|
127
|
+
export declare const ACTION_AUTHORITIES: Readonly<Record<ProductAction, readonly ProductAuthority[]>>;
|
|
128
|
+
/**
|
|
129
|
+
* Explicit obligations avoid inference from action spelling. New actions do
|
|
130
|
+
* not become privileged merely because a caller supplies a valid signature.
|
|
131
|
+
*/
|
|
132
|
+
export declare const PRODUCT_ACTION_REQUIREMENTS: Readonly<Record<ProductAction, ProductActionRequirements>>;
|
|
133
|
+
export declare function identityKey(identity: NamespacedIdentity): string;
|
|
134
|
+
export declare function sameIdentity(left: NamespacedIdentity, right: NamespacedIdentity): boolean;
|
|
135
|
+
export declare function tenantRefKey(tenant: NamespacedTenantRef): string;
|
|
136
|
+
export declare function isProductAction(value: unknown): value is ProductAction;
|
|
137
|
+
export declare function validateAuthoritativeReference(input: unknown, options?: {
|
|
138
|
+
action?: ProductAction;
|
|
139
|
+
tenantRef?: NamespacedTenantRef;
|
|
140
|
+
}): ValidationResult<AuthoritativeReference>;
|
|
141
|
+
export declare function validateProductActionEnvelope(input: unknown): ValidationResult<ProductActionEnvelopeV1>;
|
|
142
|
+
export type RuViewSemanticFieldKind = 'boolean' | 'number' | 'string' | 'nullable-string';
|
|
143
|
+
export interface RuViewSemanticFieldSchema {
|
|
144
|
+
kind: RuViewSemanticFieldKind;
|
|
145
|
+
required?: boolean;
|
|
146
|
+
min?: number;
|
|
147
|
+
max?: number;
|
|
148
|
+
maxLength?: number;
|
|
149
|
+
enum?: readonly string[];
|
|
150
|
+
}
|
|
151
|
+
export interface RuViewObservationSchema {
|
|
152
|
+
privacyClasses: readonly ('P2' | 'P3')[];
|
|
153
|
+
fields: Readonly<Record<string, RuViewSemanticFieldSchema>>;
|
|
154
|
+
}
|
|
155
|
+
export type RuViewObservationRegistry = Readonly<Record<string, RuViewObservationSchema>>;
|
|
156
|
+
/**
|
|
157
|
+
* The default edge-export surface is deliberately small and semantic. A new
|
|
158
|
+
* observation type or field requires explicit schema registration; arbitrary
|
|
159
|
+
* keys are never accepted based on a deny-list alone.
|
|
160
|
+
*/
|
|
161
|
+
export declare const DEFAULT_RUVIEW_OBSERVATION_REGISTRY: RuViewObservationRegistry;
|
|
162
|
+
export declare function validateRuViewSemanticObservation(input: unknown, registry?: RuViewObservationRegistry): ValidationResult<RuViewSemanticObservationV1>;
|
|
163
|
+
/**
|
|
164
|
+
* RFC 8785/JCS-compatible canonical JSON for this I-JSON profile.
|
|
165
|
+
*
|
|
166
|
+
* ECMAScript's JSON number serialization supplies the JCS number rendering.
|
|
167
|
+
* Non-finite numbers, sparse arrays, undefined values, non-plain objects, and
|
|
168
|
+
* invalid Unicode are rejected instead of being silently coerced.
|
|
169
|
+
*/
|
|
170
|
+
export declare function canonicalizeProductPlane(value: unknown): string;
|
|
171
|
+
export declare function canonicalProductPlaneBytes(value: unknown): Uint8Array;
|
|
172
|
+
export declare function canonicalProductPlaneDigest(value: unknown): `sha256:${string}`;
|
|
173
|
+
export interface SignedProductActionEnvelopeV1 {
|
|
174
|
+
envelope: ProductActionEnvelopeV1;
|
|
175
|
+
algorithm: 'Ed25519';
|
|
176
|
+
keyId: string;
|
|
177
|
+
signature: string;
|
|
178
|
+
}
|
|
179
|
+
export type SignatureVerifier = (input: {
|
|
180
|
+
issuer: ProductAuthority;
|
|
181
|
+
keyId: string;
|
|
182
|
+
algorithm: 'Ed25519';
|
|
183
|
+
canonicalBytes: Uint8Array;
|
|
184
|
+
signature: Uint8Array;
|
|
185
|
+
}) => boolean | Promise<boolean>;
|
|
186
|
+
export type AuthorityKeyResolver = (issuer: ProductAuthority, keyId: string) => KeyLike | null | undefined | Promise<KeyLike | null | undefined>;
|
|
187
|
+
export interface ReplayReservationInput {
|
|
188
|
+
key: string;
|
|
189
|
+
bindingDigest: `sha256:${string}`;
|
|
190
|
+
expiresAt: number;
|
|
191
|
+
}
|
|
192
|
+
export type ReplayReservation = 'reserved' | 'replay' | 'conflict';
|
|
193
|
+
/**
|
|
194
|
+
* The implementation must reserve atomically. A lookup-then-insert adapter is
|
|
195
|
+
* not a conforming replay store under concurrent delivery.
|
|
196
|
+
*/
|
|
197
|
+
export interface ProductEnvelopeReplayStore {
|
|
198
|
+
reserve(input: ReplayReservationInput): ReplayReservation | Promise<ReplayReservation>;
|
|
199
|
+
}
|
|
200
|
+
export type LocalAuthorizationDecision = boolean | {
|
|
201
|
+
allowed: boolean;
|
|
202
|
+
reason?: string;
|
|
203
|
+
};
|
|
204
|
+
export interface ProductEnvelopeVerifierOptions {
|
|
205
|
+
expectedAudience: ProductAuthority;
|
|
206
|
+
expectedTenantRef: NamespacedTenantRef;
|
|
207
|
+
now?: () => number;
|
|
208
|
+
maxAgeMs?: number;
|
|
209
|
+
maxFutureSkewMs?: number;
|
|
210
|
+
resolveKey?: AuthorityKeyResolver;
|
|
211
|
+
verifySignature?: SignatureVerifier;
|
|
212
|
+
replayStore: ProductEnvelopeReplayStore;
|
|
213
|
+
policyVerifier: (envelope: ProductActionEnvelopeV1) => LocalAuthorizationDecision | Promise<LocalAuthorizationDecision>;
|
|
214
|
+
capabilityVerifier: (envelope: ProductActionEnvelopeV1) => LocalAuthorizationDecision | Promise<LocalAuthorizationDecision>;
|
|
215
|
+
}
|
|
216
|
+
export type ProductEnvelopeVerificationCode = 'malformed_signed_envelope' | 'invalid_envelope' | 'audience_mismatch' | 'tenant_mismatch' | 'not_yet_valid' | 'stale' | 'expired' | 'signature_configuration_missing' | 'key_not_found' | 'signature_invalid' | 'policy_denied' | 'capability_denied' | 'replay_detected' | 'idempotency_conflict' | 'verification_error';
|
|
217
|
+
export type ProductEnvelopeVerificationResult = {
|
|
218
|
+
ok: true;
|
|
219
|
+
envelope: ProductActionEnvelopeV1;
|
|
220
|
+
canonicalDigest: `sha256:${string}`;
|
|
221
|
+
replayKey: string;
|
|
222
|
+
} | {
|
|
223
|
+
ok: false;
|
|
224
|
+
code: ProductEnvelopeVerificationCode;
|
|
225
|
+
reason: string;
|
|
226
|
+
issues?: ValidationIssue[];
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* Verify a signed product action as an ingress policy-enforcement decision.
|
|
230
|
+
*
|
|
231
|
+
* Signature validity is necessary but insufficient: audience, tenant,
|
|
232
|
+
* freshness, replay state, local policy, and the action-bound capability are
|
|
233
|
+
* checked independently. Service availability is intentionally absent; a
|
|
234
|
+
* valid claim never implies that its target is configured, reachable, or
|
|
235
|
+
* healthy.
|
|
236
|
+
*/
|
|
237
|
+
export declare function verifySignedProductActionEnvelope(input: unknown, options: ProductEnvelopeVerifierOptions): Promise<ProductEnvelopeVerificationResult>;
|
|
238
|
+
//# sourceMappingURL=product-plane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-plane.d.ts","sourceRoot":"","sources":["../../src/policy/product-plane.ts"],"names":[],"mappings":"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"}
|