@vorionsys/a3i 0.1.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/LICENSE +190 -0
- package/dist/api/handlers.d.ts +231 -0
- package/dist/api/handlers.d.ts.map +1 -0
- package/dist/api/handlers.js +279 -0
- package/dist/api/handlers.js.map +1 -0
- package/dist/api/index.d.ts +24 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +27 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/middleware.d.ts +106 -0
- package/dist/api/middleware.d.ts.map +1 -0
- package/dist/api/middleware.js +186 -0
- package/dist/api/middleware.js.map +1 -0
- package/dist/api/routes.d.ts +41 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +91 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/authorization/constraints.d.ts +75 -0
- package/dist/authorization/constraints.d.ts.map +1 -0
- package/dist/authorization/constraints.js +302 -0
- package/dist/authorization/constraints.js.map +1 -0
- package/dist/authorization/decision.d.ts +98 -0
- package/dist/authorization/decision.d.ts.map +1 -0
- package/dist/authorization/decision.js +202 -0
- package/dist/authorization/decision.js.map +1 -0
- package/dist/authorization/engine.d.ts +141 -0
- package/dist/authorization/engine.d.ts.map +1 -0
- package/dist/authorization/engine.js +339 -0
- package/dist/authorization/engine.js.map +1 -0
- package/dist/authorization/index.d.ts +10 -0
- package/dist/authorization/index.d.ts.map +1 -0
- package/dist/authorization/index.js +13 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/banding/band-calculator.d.ts +137 -0
- package/dist/banding/band-calculator.d.ts.map +1 -0
- package/dist/banding/band-calculator.js +252 -0
- package/dist/banding/band-calculator.js.map +1 -0
- package/dist/banding/bands.d.ts +56 -0
- package/dist/banding/bands.d.ts.map +1 -0
- package/dist/banding/bands.js +200 -0
- package/dist/banding/bands.js.map +1 -0
- package/dist/banding/hysteresis.d.ts +64 -0
- package/dist/banding/hysteresis.d.ts.map +1 -0
- package/dist/banding/hysteresis.js +143 -0
- package/dist/banding/hysteresis.js.map +1 -0
- package/dist/banding/index.d.ts +10 -0
- package/dist/banding/index.d.ts.map +1 -0
- package/dist/banding/index.js +10 -0
- package/dist/banding/index.js.map +1 -0
- package/dist/canary/canary-service.d.ts +123 -0
- package/dist/canary/canary-service.d.ts.map +1 -0
- package/dist/canary/canary-service.js +353 -0
- package/dist/canary/canary-service.js.map +1 -0
- package/dist/canary/index.d.ts +12 -0
- package/dist/canary/index.d.ts.map +1 -0
- package/dist/canary/index.js +14 -0
- package/dist/canary/index.js.map +1 -0
- package/dist/canary/probe-library.d.ts +43 -0
- package/dist/canary/probe-library.d.ts.map +1 -0
- package/dist/canary/probe-library.js +655 -0
- package/dist/canary/probe-library.js.map +1 -0
- package/dist/execution/engine.d.ts +120 -0
- package/dist/execution/engine.d.ts.map +1 -0
- package/dist/execution/engine.js +220 -0
- package/dist/execution/engine.js.map +1 -0
- package/dist/execution/index.d.ts +7 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +7 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/gate/index.d.ts +12 -0
- package/dist/gate/index.d.ts.map +1 -0
- package/dist/gate/index.js +14 -0
- package/dist/gate/index.js.map +1 -0
- package/dist/gate/pre-action-gate.d.ts +87 -0
- package/dist/gate/pre-action-gate.d.ts.map +1 -0
- package/dist/gate/pre-action-gate.js +286 -0
- package/dist/gate/pre-action-gate.js.map +1 -0
- package/dist/gate/risk-classifier.d.ts +43 -0
- package/dist/gate/risk-classifier.d.ts.map +1 -0
- package/dist/gate/risk-classifier.js +157 -0
- package/dist/gate/risk-classifier.js.map +1 -0
- package/dist/hooks/executor.d.ts +56 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +217 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +45 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +49 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/manager.d.ts +156 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +267 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/registry.d.ts +130 -0
- package/dist/hooks/registry.d.ts.map +1 -0
- package/dist/hooks/registry.js +238 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/types.d.ts +226 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +41 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/observation/attestation.d.ts +102 -0
- package/dist/observation/attestation.d.ts.map +1 -0
- package/dist/observation/attestation.js +127 -0
- package/dist/observation/attestation.js.map +1 -0
- package/dist/observation/ceilings.d.ts +60 -0
- package/dist/observation/ceilings.d.ts.map +1 -0
- package/dist/observation/ceilings.js +110 -0
- package/dist/observation/ceilings.js.map +1 -0
- package/dist/observation/index.d.ts +11 -0
- package/dist/observation/index.d.ts.map +1 -0
- package/dist/observation/index.js +14 -0
- package/dist/observation/index.js.map +1 -0
- package/dist/observation/tiers.d.ts +96 -0
- package/dist/observation/tiers.d.ts.map +1 -0
- package/dist/observation/tiers.js +225 -0
- package/dist/observation/tiers.js.map +1 -0
- package/dist/orchestrator/index.d.ts +8 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +8 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +225 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +302 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/proof-plane-adapter.d.ts +80 -0
- package/dist/orchestrator/proof-plane-adapter.d.ts.map +1 -0
- package/dist/orchestrator/proof-plane-adapter.js +78 -0
- package/dist/orchestrator/proof-plane-adapter.js.map +1 -0
- package/dist/trust/calculator.d.ts +60 -0
- package/dist/trust/calculator.d.ts.map +1 -0
- package/dist/trust/calculator.js +163 -0
- package/dist/trust/calculator.js.map +1 -0
- package/dist/trust/dimensions.d.ts +133 -0
- package/dist/trust/dimensions.d.ts.map +1 -0
- package/dist/trust/dimensions.js +257 -0
- package/dist/trust/dimensions.js.map +1 -0
- package/dist/trust/index.d.ts +14 -0
- package/dist/trust/index.d.ts.map +1 -0
- package/dist/trust/index.js +25 -0
- package/dist/trust/index.js.map +1 -0
- package/dist/trust/profile-service.d.ts +179 -0
- package/dist/trust/profile-service.d.ts.map +1 -0
- package/dist/trust/profile-service.js +378 -0
- package/dist/trust/profile-service.js.map +1 -0
- package/dist/trust/profile-store.d.ts +122 -0
- package/dist/trust/profile-store.d.ts.map +1 -0
- package/dist/trust/profile-store.js +132 -0
- package/dist/trust/profile-store.js.map +1 -0
- package/dist/trust/trust-calculator.d.ts +111 -0
- package/dist/trust/trust-calculator.d.ts.map +1 -0
- package/dist/trust/trust-calculator.js +271 -0
- package/dist/trust/trust-calculator.js.map +1 -0
- package/dist/trust/trust-dynamics.d.ts +152 -0
- package/dist/trust/trust-dynamics.d.ts.map +1 -0
- package/dist/trust/trust-dynamics.js +302 -0
- package/dist/trust/trust-dynamics.js.map +1 -0
- package/dist/trust/weights.d.ts +57 -0
- package/dist/trust/weights.d.ts.map +1 -0
- package/dist/trust/weights.js +75 -0
- package/dist/trust/weights.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Routes - Route definitions for A3I HTTP API
|
|
3
|
+
*/
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import { type ApiKeyConfig, type RateLimitConfig, type CorsConfig } from './middleware.js';
|
|
6
|
+
import { type HandlerContext } from './handlers.js';
|
|
7
|
+
/**
|
|
8
|
+
* API configuration options
|
|
9
|
+
*/
|
|
10
|
+
export interface ApiConfig {
|
|
11
|
+
/** API key configuration */
|
|
12
|
+
apiKey?: Partial<ApiKeyConfig>;
|
|
13
|
+
/** Rate limiting configuration */
|
|
14
|
+
rateLimit?: RateLimitConfig;
|
|
15
|
+
/** CORS configuration */
|
|
16
|
+
cors?: CorsConfig;
|
|
17
|
+
/** Maximum request body size in bytes */
|
|
18
|
+
maxBodySize?: number;
|
|
19
|
+
/** Handler context with services */
|
|
20
|
+
context?: Partial<HandlerContext>;
|
|
21
|
+
/** Base path for all routes (default: /api/v1) */
|
|
22
|
+
basePath?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Default API configuration
|
|
26
|
+
*/
|
|
27
|
+
export declare const DEFAULT_API_CONFIG: Required<ApiConfig>;
|
|
28
|
+
/**
|
|
29
|
+
* Create the A3I API application
|
|
30
|
+
*/
|
|
31
|
+
export declare function createApi(config?: ApiConfig): Hono;
|
|
32
|
+
/**
|
|
33
|
+
* Create API with handler context (for testing)
|
|
34
|
+
*/
|
|
35
|
+
export declare function createApiWithContext(context: HandlerContext, config?: Omit<ApiConfig, 'context'>): Hono;
|
|
36
|
+
/**
|
|
37
|
+
* Export types for consumers
|
|
38
|
+
*/
|
|
39
|
+
export type { HandlerContext };
|
|
40
|
+
export { createHandlers, type Handlers } from './handlers.js';
|
|
41
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,kCAAkC;IAClC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,yBAAyB;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAClC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,SAAS,CAkBlD,CAAC;AAEF;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,GAAE,SAAc,GAAG,IAAI,CA6DtD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,MAAM,GAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAM,GACtC,IAAI,CAEN;AAED;;GAEG;AACH,YAAY,EAAE,cAAc,EAAE,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Routes - Route definitions for A3I HTTP API
|
|
3
|
+
*/
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import { apiKeyAuth, timing, requestId, errorHandler, rateLimit, cors, bodyLimit, } from './middleware.js';
|
|
6
|
+
import { createHandlers } from './handlers.js';
|
|
7
|
+
import { TrustProfileService } from '../trust/profile-service.js';
|
|
8
|
+
import { AuthorizationEngine } from '../authorization/engine.js';
|
|
9
|
+
/**
|
|
10
|
+
* Default API configuration
|
|
11
|
+
*/
|
|
12
|
+
export const DEFAULT_API_CONFIG = {
|
|
13
|
+
apiKey: {
|
|
14
|
+
headerName: 'X-API-Key',
|
|
15
|
+
validKeys: new Set(['development-key']),
|
|
16
|
+
allowUnauthenticated: true,
|
|
17
|
+
},
|
|
18
|
+
rateLimit: {
|
|
19
|
+
limit: 100,
|
|
20
|
+
windowMs: 60000, // 1 minute
|
|
21
|
+
},
|
|
22
|
+
cors: {
|
|
23
|
+
origin: '*',
|
|
24
|
+
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
25
|
+
credentials: false,
|
|
26
|
+
},
|
|
27
|
+
maxBodySize: 1024 * 1024, // 1MB
|
|
28
|
+
context: {},
|
|
29
|
+
basePath: '/api/v1',
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Create the A3I API application
|
|
33
|
+
*/
|
|
34
|
+
export function createApi(config = {}) {
|
|
35
|
+
const mergedConfig = {
|
|
36
|
+
...DEFAULT_API_CONFIG,
|
|
37
|
+
...config,
|
|
38
|
+
apiKey: { ...DEFAULT_API_CONFIG.apiKey, ...config.apiKey },
|
|
39
|
+
cors: { ...DEFAULT_API_CONFIG.cors, ...config.cors },
|
|
40
|
+
};
|
|
41
|
+
// Create services if not provided
|
|
42
|
+
const profileService = config.context?.profileService ?? new TrustProfileService();
|
|
43
|
+
const authEngine = config.context?.authEngine ?? new AuthorizationEngine({ profileService });
|
|
44
|
+
const context = {
|
|
45
|
+
profileService,
|
|
46
|
+
authEngine,
|
|
47
|
+
};
|
|
48
|
+
const handlers = createHandlers(context);
|
|
49
|
+
const app = new Hono();
|
|
50
|
+
// Apply global middleware
|
|
51
|
+
app.use('*', cors(mergedConfig.cors));
|
|
52
|
+
app.use('*', timing);
|
|
53
|
+
app.use('*', requestId);
|
|
54
|
+
app.use('*', errorHandler);
|
|
55
|
+
app.use('*', bodyLimit(mergedConfig.maxBodySize));
|
|
56
|
+
app.use('*', rateLimit(mergedConfig.rateLimit));
|
|
57
|
+
app.use('*', apiKeyAuth(mergedConfig.apiKey));
|
|
58
|
+
const basePath = mergedConfig.basePath;
|
|
59
|
+
// Health check (no auth required)
|
|
60
|
+
app.get(`${basePath}/health`, handlers.health);
|
|
61
|
+
// Service info
|
|
62
|
+
app.get(`${basePath}/info`, handlers.info);
|
|
63
|
+
// Authorization endpoint
|
|
64
|
+
app.post(`${basePath}/authorize`, handlers.authorize);
|
|
65
|
+
// Trust profile endpoints
|
|
66
|
+
app.get(`${basePath}/trust`, handlers.listTrustProfiles);
|
|
67
|
+
app.get(`${basePath}/trust/:agentId`, handlers.getTrustProfile);
|
|
68
|
+
app.get(`${basePath}/trust/:agentId/history`, handlers.getTrustHistory);
|
|
69
|
+
app.post(`${basePath}/trust/calculate`, handlers.calculateTrust);
|
|
70
|
+
app.delete(`${basePath}/trust/:agentId`, handlers.deleteTrustProfile);
|
|
71
|
+
// Band configuration
|
|
72
|
+
app.get(`${basePath}/bands`, handlers.getBands);
|
|
73
|
+
// 404 handler
|
|
74
|
+
app.notFound((c) => {
|
|
75
|
+
return c.json({
|
|
76
|
+
error: {
|
|
77
|
+
code: 'NOT_FOUND',
|
|
78
|
+
message: `Route ${c.req.method} ${c.req.path} not found`,
|
|
79
|
+
},
|
|
80
|
+
}, 404);
|
|
81
|
+
});
|
|
82
|
+
return app;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create API with handler context (for testing)
|
|
86
|
+
*/
|
|
87
|
+
export function createApiWithContext(context, config = {}) {
|
|
88
|
+
return createApi({ ...config, context });
|
|
89
|
+
}
|
|
90
|
+
export { createHandlers } from './handlers.js';
|
|
91
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constraint Generation - Generate decision constraints based on trust level
|
|
3
|
+
*
|
|
4
|
+
* Constraints define what an agent can do when a request is permitted.
|
|
5
|
+
* Higher trust levels get more permissive constraints.
|
|
6
|
+
*/
|
|
7
|
+
import { TrustBand, ApprovalType, ActionType, DataSensitivity, type DecisionConstraints, type ApprovalRequirement, type RateLimit, type Intent } from '@vorionsys/contracts';
|
|
8
|
+
/**
|
|
9
|
+
* Constraint preset for a trust band
|
|
10
|
+
*/
|
|
11
|
+
export interface ConstraintPreset {
|
|
12
|
+
/** Default allowed tools at this band */
|
|
13
|
+
defaultTools: string[];
|
|
14
|
+
/** Default data scopes at this band */
|
|
15
|
+
defaultDataScopes: string[];
|
|
16
|
+
/** Default rate limits */
|
|
17
|
+
defaultRateLimits: RateLimit[];
|
|
18
|
+
/** Maximum execution time in ms */
|
|
19
|
+
maxExecutionTimeMs: number;
|
|
20
|
+
/** Maximum retry attempts */
|
|
21
|
+
maxRetries: number;
|
|
22
|
+
/** Whether reversibility is required */
|
|
23
|
+
reversibilityRequired: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Default constraint presets by trust band
|
|
27
|
+
*/
|
|
28
|
+
export declare const BAND_CONSTRAINT_PRESETS: Record<TrustBand, ConstraintPreset>;
|
|
29
|
+
/**
|
|
30
|
+
* Approval requirements by action risk level
|
|
31
|
+
*/
|
|
32
|
+
export interface ApprovalPolicy {
|
|
33
|
+
/** Minimum trust band that bypasses this approval */
|
|
34
|
+
bypassBand: TrustBand;
|
|
35
|
+
/** Approval type required below bypass band */
|
|
36
|
+
approvalType: ApprovalType;
|
|
37
|
+
/** Who needs to approve */
|
|
38
|
+
approverRole: string;
|
|
39
|
+
/** Timeout for approval in ms */
|
|
40
|
+
timeoutMs: number;
|
|
41
|
+
/** Reason message */
|
|
42
|
+
reason: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Default approval policies
|
|
46
|
+
*/
|
|
47
|
+
export declare const DEFAULT_APPROVAL_POLICIES: Record<string, ApprovalPolicy>;
|
|
48
|
+
/**
|
|
49
|
+
* Options for constraint generation
|
|
50
|
+
*/
|
|
51
|
+
export interface ConstraintGenerationOptions {
|
|
52
|
+
/** Override default tools */
|
|
53
|
+
allowedTools?: string[];
|
|
54
|
+
/** Override default data scopes */
|
|
55
|
+
dataScopes?: string[];
|
|
56
|
+
/** Override rate limits */
|
|
57
|
+
rateLimits?: RateLimit[];
|
|
58
|
+
/** Additional approval requirements */
|
|
59
|
+
additionalApprovals?: ApprovalRequirement[];
|
|
60
|
+
/** Custom resource quotas */
|
|
61
|
+
resourceQuotas?: Record<string, number>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Generate constraints for a decision based on trust band and intent
|
|
65
|
+
*/
|
|
66
|
+
export declare function generateConstraints(band: TrustBand, intent: Intent, options?: ConstraintGenerationOptions): DecisionConstraints;
|
|
67
|
+
/**
|
|
68
|
+
* Check if constraints allow an action
|
|
69
|
+
*/
|
|
70
|
+
export declare function constraintsPermit(constraints: DecisionConstraints, actionType: ActionType, dataSensitivity: DataSensitivity): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Merge two sets of constraints (more restrictive wins)
|
|
73
|
+
*/
|
|
74
|
+
export declare function mergeConstraints(a: DecisionConstraints, b: DecisionConstraints): DecisionConstraints;
|
|
75
|
+
//# sourceMappingURL=constraints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/authorization/constraints.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,SAAS,EACT,YAAY,EACZ,UAAU,EACV,eAAe,EAEf,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,MAAM,EACZ,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,uCAAuC;IACvC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,0BAA0B;IAC1B,iBAAiB,EAAE,SAAS,EAAE,CAAC;IAC/B,mCAAmC;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAiEvE,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,UAAU,EAAE,SAAS,CAAC;IACtB,+CAA+C;IAC/C,YAAY,EAAE,YAAY,CAAC;IAC3B,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA6BpE,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,uCAAuC;IACvC,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC5C,6BAA6B;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,2BAAgC,GACxC,mBAAmB,CAiCrB;AA8ID;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,mBAAmB,EAChC,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,GAC/B,OAAO,CAyBT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,mBAAmB,EACtB,CAAC,EAAE,mBAAmB,GACrB,mBAAmB,CAgBrB"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constraint Generation - Generate decision constraints based on trust level
|
|
3
|
+
*
|
|
4
|
+
* Constraints define what an agent can do when a request is permitted.
|
|
5
|
+
* Higher trust levels get more permissive constraints.
|
|
6
|
+
*/
|
|
7
|
+
import { TrustBand, ApprovalType, ActionType, DataSensitivity, Reversibility, } from '@vorionsys/contracts';
|
|
8
|
+
/**
|
|
9
|
+
* Default constraint presets by trust band
|
|
10
|
+
*/
|
|
11
|
+
export const BAND_CONSTRAINT_PRESETS = {
|
|
12
|
+
[TrustBand.T0_SANDBOX]: {
|
|
13
|
+
defaultTools: [],
|
|
14
|
+
defaultDataScopes: [],
|
|
15
|
+
defaultRateLimits: [{ resource: 'requests', limit: 0, windowSeconds: 60 }],
|
|
16
|
+
maxExecutionTimeMs: 0,
|
|
17
|
+
maxRetries: 0,
|
|
18
|
+
reversibilityRequired: true,
|
|
19
|
+
},
|
|
20
|
+
[TrustBand.T1_OBSERVED]: {
|
|
21
|
+
defaultTools: ['read_public'],
|
|
22
|
+
defaultDataScopes: ['public'],
|
|
23
|
+
defaultRateLimits: [{ resource: 'requests', limit: 10, windowSeconds: 60 }],
|
|
24
|
+
maxExecutionTimeMs: 5000,
|
|
25
|
+
maxRetries: 1,
|
|
26
|
+
reversibilityRequired: true,
|
|
27
|
+
},
|
|
28
|
+
[TrustBand.T2_PROVISIONAL]: {
|
|
29
|
+
defaultTools: ['read_public', 'read_internal', 'write_reversible'],
|
|
30
|
+
defaultDataScopes: ['public', 'internal'],
|
|
31
|
+
defaultRateLimits: [{ resource: 'requests', limit: 50, windowSeconds: 60 }],
|
|
32
|
+
maxExecutionTimeMs: 30000,
|
|
33
|
+
maxRetries: 2,
|
|
34
|
+
reversibilityRequired: true,
|
|
35
|
+
},
|
|
36
|
+
[TrustBand.T3_MONITORED]: {
|
|
37
|
+
defaultTools: ['read_public', 'read_internal', 'write_reversible', 'write_irreversible', 'execute_sandboxed'],
|
|
38
|
+
defaultDataScopes: ['public', 'internal', 'confidential'],
|
|
39
|
+
defaultRateLimits: [{ resource: 'requests', limit: 200, windowSeconds: 60 }],
|
|
40
|
+
maxExecutionTimeMs: 60000,
|
|
41
|
+
maxRetries: 3,
|
|
42
|
+
reversibilityRequired: false,
|
|
43
|
+
},
|
|
44
|
+
[TrustBand.T4_STANDARD]: {
|
|
45
|
+
defaultTools: ['read_public', 'read_internal', 'write_reversible', 'write_irreversible', 'execute_sandboxed', 'execute_production', 'communicate_internal', 'communicate_external'],
|
|
46
|
+
defaultDataScopes: ['public', 'internal', 'confidential', 'restricted'],
|
|
47
|
+
defaultRateLimits: [{ resource: 'requests', limit: 1000, windowSeconds: 60 }],
|
|
48
|
+
maxExecutionTimeMs: 300000,
|
|
49
|
+
maxRetries: 5,
|
|
50
|
+
reversibilityRequired: false,
|
|
51
|
+
},
|
|
52
|
+
[TrustBand.T5_TRUSTED]: {
|
|
53
|
+
defaultTools: ['*'],
|
|
54
|
+
defaultDataScopes: ['*'],
|
|
55
|
+
defaultRateLimits: [{ resource: 'requests', limit: 5000, windowSeconds: 60 }],
|
|
56
|
+
maxExecutionTimeMs: 600000,
|
|
57
|
+
maxRetries: 7,
|
|
58
|
+
reversibilityRequired: false,
|
|
59
|
+
},
|
|
60
|
+
[TrustBand.T6_CERTIFIED]: {
|
|
61
|
+
defaultTools: ['*'],
|
|
62
|
+
defaultDataScopes: ['*'],
|
|
63
|
+
defaultRateLimits: [{ resource: 'requests', limit: 10000, windowSeconds: 60 }],
|
|
64
|
+
maxExecutionTimeMs: 0, // No limit
|
|
65
|
+
maxRetries: 10,
|
|
66
|
+
reversibilityRequired: false,
|
|
67
|
+
},
|
|
68
|
+
[TrustBand.T7_AUTONOMOUS]: {
|
|
69
|
+
defaultTools: ['*'],
|
|
70
|
+
defaultDataScopes: ['*'],
|
|
71
|
+
defaultRateLimits: [], // No limits
|
|
72
|
+
maxExecutionTimeMs: 0, // No limit
|
|
73
|
+
maxRetries: 10,
|
|
74
|
+
reversibilityRequired: false,
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Default approval policies
|
|
79
|
+
*/
|
|
80
|
+
export const DEFAULT_APPROVAL_POLICIES = {
|
|
81
|
+
irreversible_action: {
|
|
82
|
+
bypassBand: TrustBand.T3_MONITORED,
|
|
83
|
+
approvalType: ApprovalType.HUMAN_REVIEW,
|
|
84
|
+
approverRole: 'supervisor',
|
|
85
|
+
timeoutMs: 300000,
|
|
86
|
+
reason: 'Irreversible action requires human approval at this trust level',
|
|
87
|
+
},
|
|
88
|
+
restricted_data: {
|
|
89
|
+
bypassBand: TrustBand.T4_STANDARD,
|
|
90
|
+
approvalType: ApprovalType.MULTI_PARTY,
|
|
91
|
+
approverRole: 'data_owner',
|
|
92
|
+
timeoutMs: 600000,
|
|
93
|
+
reason: 'Access to restricted data requires multi-party approval',
|
|
94
|
+
},
|
|
95
|
+
external_communication: {
|
|
96
|
+
bypassBand: TrustBand.T3_MONITORED,
|
|
97
|
+
approvalType: ApprovalType.AUTOMATED_CHECK,
|
|
98
|
+
approverRole: 'system',
|
|
99
|
+
timeoutMs: 5000,
|
|
100
|
+
reason: 'External communication requires verification',
|
|
101
|
+
},
|
|
102
|
+
production_execution: {
|
|
103
|
+
bypassBand: TrustBand.T3_MONITORED,
|
|
104
|
+
approvalType: ApprovalType.HUMAN_REVIEW,
|
|
105
|
+
approverRole: 'operator',
|
|
106
|
+
timeoutMs: 300000,
|
|
107
|
+
reason: 'Production execution requires operator approval',
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Generate constraints for a decision based on trust band and intent
|
|
112
|
+
*/
|
|
113
|
+
export function generateConstraints(band, intent, options = {}) {
|
|
114
|
+
const preset = BAND_CONSTRAINT_PRESETS[band];
|
|
115
|
+
// Determine required approvals
|
|
116
|
+
const requiredApprovals = determineApprovals(band, intent);
|
|
117
|
+
if (options.additionalApprovals) {
|
|
118
|
+
requiredApprovals.push(...options.additionalApprovals);
|
|
119
|
+
}
|
|
120
|
+
// Determine allowed tools
|
|
121
|
+
let allowedTools = options.allowedTools ?? [...preset.defaultTools];
|
|
122
|
+
allowedTools = filterToolsByIntent(allowedTools, intent);
|
|
123
|
+
// Determine data scopes
|
|
124
|
+
let dataScopes = options.dataScopes ?? [...preset.defaultDataScopes];
|
|
125
|
+
dataScopes = filterScopesByIntent(dataScopes, intent);
|
|
126
|
+
// Determine rate limits
|
|
127
|
+
const rateLimits = options.rateLimits ?? [...preset.defaultRateLimits];
|
|
128
|
+
// Determine reversibility requirement
|
|
129
|
+
const reversibilityRequired = determineReversibilityRequired(band, intent, preset);
|
|
130
|
+
return {
|
|
131
|
+
requiredApprovals,
|
|
132
|
+
allowedTools,
|
|
133
|
+
dataScopes,
|
|
134
|
+
rateLimits,
|
|
135
|
+
reversibilityRequired,
|
|
136
|
+
maxExecutionTimeMs: preset.maxExecutionTimeMs || undefined,
|
|
137
|
+
maxRetries: preset.maxRetries || undefined,
|
|
138
|
+
resourceQuotas: options.resourceQuotas,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Determine what approvals are required based on band and intent
|
|
143
|
+
*/
|
|
144
|
+
function determineApprovals(band, intent) {
|
|
145
|
+
const approvals = [];
|
|
146
|
+
// Check for irreversible actions
|
|
147
|
+
if (intent.reversibility === Reversibility.IRREVERSIBLE) {
|
|
148
|
+
const policy = DEFAULT_APPROVAL_POLICIES.irreversible_action;
|
|
149
|
+
if (band < policy.bypassBand) {
|
|
150
|
+
approvals.push({
|
|
151
|
+
type: policy.approvalType,
|
|
152
|
+
approver: policy.approverRole,
|
|
153
|
+
timeoutMs: policy.timeoutMs,
|
|
154
|
+
reason: policy.reason,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Check for restricted data
|
|
159
|
+
if (intent.dataSensitivity === DataSensitivity.RESTRICTED) {
|
|
160
|
+
const policy = DEFAULT_APPROVAL_POLICIES.restricted_data;
|
|
161
|
+
if (band < policy.bypassBand) {
|
|
162
|
+
approvals.push({
|
|
163
|
+
type: policy.approvalType,
|
|
164
|
+
approver: policy.approverRole,
|
|
165
|
+
timeoutMs: policy.timeoutMs,
|
|
166
|
+
reason: policy.reason,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Check for external communication
|
|
171
|
+
if (intent.actionType === ActionType.COMMUNICATE && intent.context?.metadata?.external) {
|
|
172
|
+
const policy = DEFAULT_APPROVAL_POLICIES.external_communication;
|
|
173
|
+
if (band < policy.bypassBand) {
|
|
174
|
+
approvals.push({
|
|
175
|
+
type: policy.approvalType,
|
|
176
|
+
approver: policy.approverRole,
|
|
177
|
+
timeoutMs: policy.timeoutMs,
|
|
178
|
+
reason: policy.reason,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Check for production execution
|
|
183
|
+
if (intent.actionType === ActionType.EXECUTE &&
|
|
184
|
+
intent.context?.environment === 'production') {
|
|
185
|
+
const policy = DEFAULT_APPROVAL_POLICIES.production_execution;
|
|
186
|
+
if (band < policy.bypassBand) {
|
|
187
|
+
approvals.push({
|
|
188
|
+
type: policy.approvalType,
|
|
189
|
+
approver: policy.approverRole,
|
|
190
|
+
timeoutMs: policy.timeoutMs,
|
|
191
|
+
reason: policy.reason,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return approvals;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Filter tools based on intent action type
|
|
199
|
+
*/
|
|
200
|
+
function filterToolsByIntent(tools, intent) {
|
|
201
|
+
// Allow all if wildcard
|
|
202
|
+
if (tools.includes('*')) {
|
|
203
|
+
return ['*'];
|
|
204
|
+
}
|
|
205
|
+
// Filter based on action type
|
|
206
|
+
switch (intent.actionType) {
|
|
207
|
+
case ActionType.READ:
|
|
208
|
+
return tools.filter((t) => t.startsWith('read_'));
|
|
209
|
+
case ActionType.WRITE:
|
|
210
|
+
return tools.filter((t) => t.startsWith('write_') || t.startsWith('read_'));
|
|
211
|
+
case ActionType.DELETE:
|
|
212
|
+
return tools.filter((t) => t.startsWith('write_') || t.startsWith('delete_') || t.startsWith('read_'));
|
|
213
|
+
case ActionType.EXECUTE:
|
|
214
|
+
return tools.filter((t) => t.startsWith('execute_') || t.startsWith('read_'));
|
|
215
|
+
case ActionType.COMMUNICATE:
|
|
216
|
+
return tools.filter((t) => t.startsWith('communicate_') || t.startsWith('read_'));
|
|
217
|
+
case ActionType.TRANSFER:
|
|
218
|
+
return tools.filter((t) => t.startsWith('transfer_') || t.startsWith('read_'));
|
|
219
|
+
default:
|
|
220
|
+
return tools;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Filter data scopes based on intent sensitivity
|
|
225
|
+
*/
|
|
226
|
+
function filterScopesByIntent(scopes, intent) {
|
|
227
|
+
// Allow all if wildcard
|
|
228
|
+
if (scopes.includes('*')) {
|
|
229
|
+
return ['*'];
|
|
230
|
+
}
|
|
231
|
+
const sensitivityOrder = [
|
|
232
|
+
DataSensitivity.PUBLIC,
|
|
233
|
+
DataSensitivity.INTERNAL,
|
|
234
|
+
DataSensitivity.CONFIDENTIAL,
|
|
235
|
+
DataSensitivity.RESTRICTED,
|
|
236
|
+
];
|
|
237
|
+
const scopeOrder = ['public', 'internal', 'confidential', 'restricted'];
|
|
238
|
+
const intentLevel = sensitivityOrder.indexOf(intent.dataSensitivity);
|
|
239
|
+
if (intentLevel === -1)
|
|
240
|
+
return scopes;
|
|
241
|
+
// Filter to scopes at or below the intent's sensitivity
|
|
242
|
+
return scopes.filter((scope) => {
|
|
243
|
+
const scopeLevel = scopeOrder.indexOf(scope);
|
|
244
|
+
return scopeLevel !== -1 && scopeLevel <= intentLevel;
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Determine if reversibility is required
|
|
249
|
+
*/
|
|
250
|
+
function determineReversibilityRequired(band, intent, preset) {
|
|
251
|
+
// If intent is already reversible, no requirement needed
|
|
252
|
+
if (intent.reversibility === Reversibility.REVERSIBLE) {
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
// Higher trust bands don't require reversibility
|
|
256
|
+
if (band >= TrustBand.T3_MONITORED) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
return preset.reversibilityRequired;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Check if constraints allow an action
|
|
263
|
+
*/
|
|
264
|
+
export function constraintsPermit(constraints, actionType, dataSensitivity) {
|
|
265
|
+
// Check if tools allow the action type
|
|
266
|
+
const toolPrefix = actionType.toLowerCase();
|
|
267
|
+
const hasMatchingTool = constraints.allowedTools.includes('*') ||
|
|
268
|
+
constraints.allowedTools.some((t) => t.startsWith(toolPrefix) || t.startsWith('read_'));
|
|
269
|
+
if (!hasMatchingTool) {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
// Check data scope
|
|
273
|
+
const sensitivityToScope = {
|
|
274
|
+
[DataSensitivity.PUBLIC]: 'public',
|
|
275
|
+
[DataSensitivity.INTERNAL]: 'internal',
|
|
276
|
+
[DataSensitivity.CONFIDENTIAL]: 'confidential',
|
|
277
|
+
[DataSensitivity.RESTRICTED]: 'restricted',
|
|
278
|
+
};
|
|
279
|
+
const requiredScope = sensitivityToScope[dataSensitivity];
|
|
280
|
+
const hasScopeAccess = constraints.dataScopes.includes('*') ||
|
|
281
|
+
constraints.dataScopes.includes(requiredScope);
|
|
282
|
+
return hasScopeAccess;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Merge two sets of constraints (more restrictive wins)
|
|
286
|
+
*/
|
|
287
|
+
export function mergeConstraints(a, b) {
|
|
288
|
+
return {
|
|
289
|
+
requiredApprovals: [...a.requiredApprovals, ...b.requiredApprovals],
|
|
290
|
+
allowedTools: a.allowedTools.filter((t) => b.allowedTools.includes(t) || t === '*'),
|
|
291
|
+
dataScopes: a.dataScopes.filter((s) => b.dataScopes.includes(s) || s === '*'),
|
|
292
|
+
rateLimits: [...a.rateLimits, ...b.rateLimits],
|
|
293
|
+
reversibilityRequired: a.reversibilityRequired || b.reversibilityRequired,
|
|
294
|
+
maxExecutionTimeMs: a.maxExecutionTimeMs && b.maxExecutionTimeMs
|
|
295
|
+
? Math.min(a.maxExecutionTimeMs, b.maxExecutionTimeMs)
|
|
296
|
+
: a.maxExecutionTimeMs ?? b.maxExecutionTimeMs,
|
|
297
|
+
maxRetries: a.maxRetries !== undefined && b.maxRetries !== undefined
|
|
298
|
+
? Math.min(a.maxRetries, b.maxRetries)
|
|
299
|
+
: a.maxRetries ?? b.maxRetries,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=constraints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/authorization/constraints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision Builder - Construct authorization decisions
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for creating Decision objects with proper
|
|
5
|
+
* validation and structure.
|
|
6
|
+
*/
|
|
7
|
+
import { TrustBand, DenialReason, type Decision, type DecisionConstraints, type Intent, type TrustProfile } from '@vorionsys/contracts';
|
|
8
|
+
/**
|
|
9
|
+
* Options for building a decision
|
|
10
|
+
*/
|
|
11
|
+
export interface DecisionBuildOptions {
|
|
12
|
+
/** Override decision ID */
|
|
13
|
+
decisionId?: string;
|
|
14
|
+
/** Policy set that was used */
|
|
15
|
+
policySetId?: string;
|
|
16
|
+
/** Decision validity duration in ms (default: 5 minutes) */
|
|
17
|
+
validityDurationMs?: number;
|
|
18
|
+
/** Current time for calculation */
|
|
19
|
+
now?: Date;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Result of a permit decision
|
|
23
|
+
*/
|
|
24
|
+
export interface PermitResult {
|
|
25
|
+
type: 'permit';
|
|
26
|
+
reasoning: string[];
|
|
27
|
+
constraints: DecisionConstraints;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Result of a deny decision
|
|
31
|
+
*/
|
|
32
|
+
export interface DenyResult {
|
|
33
|
+
type: 'deny';
|
|
34
|
+
reason: DenialReason;
|
|
35
|
+
reasoning: string[];
|
|
36
|
+
remediations?: string[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Union type for authorization results
|
|
40
|
+
*/
|
|
41
|
+
export type AuthorizationResult = PermitResult | DenyResult;
|
|
42
|
+
/**
|
|
43
|
+
* Build a permit decision
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildPermitDecision(intent: Intent, profile: TrustProfile, constraints: DecisionConstraints, reasoning: string[], options?: DecisionBuildOptions): Decision;
|
|
46
|
+
/**
|
|
47
|
+
* Build a deny decision
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildDenyDecision(intent: Intent, profile: TrustProfile | null, _reason: DenialReason, // Reserved for future denialReason field in Decision
|
|
50
|
+
reasoning: string[], options?: DecisionBuildOptions): Decision;
|
|
51
|
+
/**
|
|
52
|
+
* Get remediation suggestions for a denial reason
|
|
53
|
+
*/
|
|
54
|
+
export declare function getRemediations(reason: DenialReason, _context?: Record<string, unknown>): string[];
|
|
55
|
+
/**
|
|
56
|
+
* Determine the denial reason based on evaluation context
|
|
57
|
+
*/
|
|
58
|
+
export declare function determineDenialReason(profile: TrustProfile | null, _intent: Intent, // Reserved for future intent-specific denial logic
|
|
59
|
+
minRequiredBand: TrustBand, checks: {
|
|
60
|
+
intentExpired?: boolean;
|
|
61
|
+
rateLimitExceeded?: boolean;
|
|
62
|
+
resourceRestricted?: boolean;
|
|
63
|
+
policyViolation?: boolean;
|
|
64
|
+
contextMismatch?: boolean;
|
|
65
|
+
}): DenialReason;
|
|
66
|
+
/**
|
|
67
|
+
* Create decision summary for logging
|
|
68
|
+
*/
|
|
69
|
+
export declare function summarizeDecision(decision: Decision): string;
|
|
70
|
+
/**
|
|
71
|
+
* Check if a decision is still valid
|
|
72
|
+
*/
|
|
73
|
+
export declare function isDecisionValid(decision: Decision, now?: Date): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Decision builder class for fluent API
|
|
76
|
+
*/
|
|
77
|
+
export declare class DecisionBuilder {
|
|
78
|
+
private intent;
|
|
79
|
+
private profile;
|
|
80
|
+
private permitted;
|
|
81
|
+
private constraints;
|
|
82
|
+
private reasoning;
|
|
83
|
+
private denialReason;
|
|
84
|
+
private options;
|
|
85
|
+
constructor(intent: Intent);
|
|
86
|
+
withProfile(profile: TrustProfile): this;
|
|
87
|
+
permit(): this;
|
|
88
|
+
deny(reason: DenialReason): this;
|
|
89
|
+
withConstraints(constraints: DecisionConstraints): this;
|
|
90
|
+
addReasoning(...reasons: string[]): this;
|
|
91
|
+
withOptions(options: DecisionBuildOptions): this;
|
|
92
|
+
build(): Decision;
|
|
93
|
+
/**
|
|
94
|
+
* Static factory for creating builders
|
|
95
|
+
*/
|
|
96
|
+
static for(intent: Intent): DecisionBuilder;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=decision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../../src/authorization/decision.ts"],"names":[],"mappings":"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"}
|