@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.
Files changed (120) hide show
  1. package/dist/CVE-REMEDIATION.d.ts +17 -6
  2. package/dist/CVE-REMEDIATION.d.ts.map +1 -1
  3. package/dist/CVE-REMEDIATION.js +328 -12
  4. package/dist/CVE-REMEDIATION.js.map +1 -1
  5. package/dist/authorization/propagator.d.ts +148 -0
  6. package/dist/authorization/propagator.d.ts.map +1 -0
  7. package/dist/authorization/propagator.js +182 -0
  8. package/dist/authorization/propagator.js.map +1 -0
  9. package/dist/index.d.ts +11 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +36 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/keychain-adapter.d.ts +48 -0
  14. package/dist/keychain-adapter.d.ts.map +1 -0
  15. package/dist/keychain-adapter.js +0 -0
  16. package/dist/keychain-adapter.js.map +1 -0
  17. package/dist/mcp-caller-identity.d.ts +101 -0
  18. package/dist/mcp-caller-identity.d.ts.map +1 -0
  19. package/dist/mcp-caller-identity.js +0 -0
  20. package/dist/mcp-caller-identity.js.map +1 -0
  21. package/dist/mcp-composition-inspector.d.ts +133 -0
  22. package/dist/mcp-composition-inspector.d.ts.map +1 -0
  23. package/dist/mcp-composition-inspector.js +254 -0
  24. package/dist/mcp-composition-inspector.js.map +1 -0
  25. package/dist/oauth/browser.d.ts +31 -0
  26. package/dist/oauth/browser.d.ts.map +1 -0
  27. package/dist/oauth/browser.js +55 -0
  28. package/dist/oauth/browser.js.map +1 -0
  29. package/dist/oauth/callback-server.d.ts +37 -0
  30. package/dist/oauth/callback-server.d.ts.map +1 -0
  31. package/dist/oauth/callback-server.js +86 -0
  32. package/dist/oauth/callback-server.js.map +1 -0
  33. package/dist/oauth/client.d.ts +57 -0
  34. package/dist/oauth/client.d.ts.map +1 -0
  35. package/dist/oauth/client.js +120 -0
  36. package/dist/oauth/client.js.map +1 -0
  37. package/dist/oauth/pkce.d.ts +25 -0
  38. package/dist/oauth/pkce.d.ts.map +1 -0
  39. package/dist/oauth/pkce.js +36 -0
  40. package/dist/oauth/pkce.js.map +1 -0
  41. package/dist/path-validator.d.ts +23 -0
  42. package/dist/path-validator.d.ts.map +1 -1
  43. package/dist/path-validator.js +128 -5
  44. package/dist/path-validator.js.map +1 -1
  45. package/dist/plugins/integrity-verifier.d.ts +125 -0
  46. package/dist/plugins/integrity-verifier.d.ts.map +1 -0
  47. package/dist/plugins/integrity-verifier.js +186 -0
  48. package/dist/plugins/integrity-verifier.js.map +1 -0
  49. package/dist/policy/canonical.d.ts +5 -0
  50. package/dist/policy/canonical.d.ts.map +1 -0
  51. package/dist/policy/canonical.js +30 -0
  52. package/dist/policy/canonical.js.map +1 -0
  53. package/dist/policy/engine.d.ts +34 -0
  54. package/dist/policy/engine.d.ts.map +1 -0
  55. package/dist/policy/engine.js +285 -0
  56. package/dist/policy/engine.js.map +1 -0
  57. package/dist/policy/envelope.d.ts +9 -0
  58. package/dist/policy/envelope.d.ts.map +1 -0
  59. package/dist/policy/envelope.js +90 -0
  60. package/dist/policy/envelope.js.map +1 -0
  61. package/dist/policy/evaluator.d.ts +4 -0
  62. package/dist/policy/evaluator.d.ts.map +1 -0
  63. package/dist/policy/evaluator.js +119 -0
  64. package/dist/policy/evaluator.js.map +1 -0
  65. package/dist/policy/index.d.ts +7 -0
  66. package/dist/policy/index.d.ts.map +1 -0
  67. package/dist/policy/index.js +7 -0
  68. package/dist/policy/index.js.map +1 -0
  69. package/dist/policy/product-plane.d.ts +238 -0
  70. package/dist/policy/product-plane.d.ts.map +1 -0
  71. package/dist/policy/product-plane.js +1022 -0
  72. package/dist/policy/product-plane.js.map +1 -0
  73. package/dist/policy/types.d.ts +169 -0
  74. package/dist/policy/types.d.ts.map +1 -0
  75. package/dist/policy/types.js +2 -0
  76. package/dist/policy/types.js.map +1 -0
  77. package/dist/safe-git.d.ts +22 -0
  78. package/dist/safe-git.d.ts.map +1 -0
  79. package/dist/safe-git.js +63 -0
  80. package/dist/safe-git.js.map +1 -0
  81. package/dist/tool-output-guardrail.d.ts +126 -0
  82. package/dist/tool-output-guardrail.d.ts.map +1 -0
  83. package/dist/tool-output-guardrail.js +257 -0
  84. package/dist/tool-output-guardrail.js.map +1 -0
  85. package/package.json +17 -5
  86. package/__tests__/acceptance/security-compliance.test.ts +0 -674
  87. package/__tests__/credential-generator.test.ts +0 -310
  88. package/__tests__/fixtures/configurations.ts +0 -425
  89. package/__tests__/fixtures/index.ts +0 -21
  90. package/__tests__/helpers/create-mock.ts +0 -469
  91. package/__tests__/helpers/index.ts +0 -32
  92. package/__tests__/input-validator.test.ts +0 -382
  93. package/__tests__/integration/security-flow.test.ts +0 -606
  94. package/__tests__/password-hasher.test.ts +0 -239
  95. package/__tests__/path-validator.test.ts +0 -302
  96. package/__tests__/safe-executor.test.ts +0 -292
  97. package/__tests__/token-generator.test.ts +0 -371
  98. package/__tests__/unit/credential-generator.test.ts +0 -182
  99. package/__tests__/unit/password-hasher.test.ts +0 -359
  100. package/__tests__/unit/path-validator.test.ts +0 -509
  101. package/__tests__/unit/safe-executor.test.ts +0 -667
  102. package/__tests__/unit/token-generator.test.ts +0 -310
  103. package/ruvector.db +0 -0
  104. package/src/CVE-REMEDIATION.ts +0 -251
  105. package/src/application/index.ts +0 -10
  106. package/src/application/services/security-application-service.ts +0 -193
  107. package/src/credential-generator.ts +0 -368
  108. package/src/domain/entities/security-context.ts +0 -173
  109. package/src/domain/index.ts +0 -17
  110. package/src/domain/services/security-domain-service.ts +0 -296
  111. package/src/index.ts +0 -271
  112. package/src/input-validator.ts +0 -466
  113. package/src/password-hasher.ts +0 -277
  114. package/src/path-validator.ts +0 -525
  115. package/src/safe-executor.ts +0 -546
  116. package/src/token-generator.ts +0 -463
  117. package/tmp.json +0 -0
  118. package/tsconfig.json +0 -9
  119. package/tsconfig.tsbuildinfo +0 -1
  120. 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,7 @@
1
+ export * from './types.js';
2
+ export * from './canonical.js';
3
+ export * from './envelope.js';
4
+ export * from './evaluator.js';
5
+ export * from './engine.js';
6
+ export * from './product-plane.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ export * from './types.js';
2
+ export * from './canonical.js';
3
+ export * from './envelope.js';
4
+ export * from './evaluator.js';
5
+ export * from './engine.js';
6
+ export * from './product-plane.js';
7
+ //# sourceMappingURL=index.js.map
@@ -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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"}