@trentapps/manager-protocol 1.1.2 → 1.2.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 (150) hide show
  1. package/README.md +29 -1
  2. package/dist/analyzers/CSSAnalyzer.d.ts +188 -8
  3. package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -1
  4. package/dist/analyzers/CSSAnalyzer.js +794 -192
  5. package/dist/analyzers/CSSAnalyzer.js.map +1 -1
  6. package/dist/cli.js +1 -1
  7. package/dist/config/dashboard.d.ts +55 -0
  8. package/dist/config/dashboard.d.ts.map +1 -0
  9. package/dist/config/dashboard.js +103 -0
  10. package/dist/config/dashboard.js.map +1 -0
  11. package/dist/config/index.d.ts +7 -0
  12. package/dist/config/index.d.ts.map +1 -0
  13. package/dist/config/index.js +7 -0
  14. package/dist/config/index.js.map +1 -0
  15. package/dist/dashboard/httpDashboard.d.ts +100 -0
  16. package/dist/dashboard/httpDashboard.d.ts.map +1 -0
  17. package/dist/dashboard/httpDashboard.js +1276 -0
  18. package/dist/dashboard/httpDashboard.js.map +1 -0
  19. package/dist/dashboard/index.d.ts +6 -0
  20. package/dist/dashboard/index.d.ts.map +1 -0
  21. package/dist/dashboard/index.js +7 -0
  22. package/dist/dashboard/index.js.map +1 -0
  23. package/dist/engine/AuditLogger.d.ts +370 -2
  24. package/dist/engine/AuditLogger.d.ts.map +1 -1
  25. package/dist/engine/AuditLogger.js +1067 -24
  26. package/dist/engine/AuditLogger.js.map +1 -1
  27. package/dist/engine/GitHubApprovalManager.d.ts +13 -0
  28. package/dist/engine/GitHubApprovalManager.d.ts.map +1 -1
  29. package/dist/engine/GitHubApprovalManager.js +72 -46
  30. package/dist/engine/GitHubApprovalManager.js.map +1 -1
  31. package/dist/engine/GitHubClient.d.ts +183 -0
  32. package/dist/engine/GitHubClient.d.ts.map +1 -0
  33. package/dist/engine/GitHubClient.js +411 -0
  34. package/dist/engine/GitHubClient.js.map +1 -0
  35. package/dist/engine/RateLimiter.d.ts +5 -3
  36. package/dist/engine/RateLimiter.d.ts.map +1 -1
  37. package/dist/engine/RateLimiter.js +53 -70
  38. package/dist/engine/RateLimiter.js.map +1 -1
  39. package/dist/engine/RuleDependencyAnalyzer.d.ts +73 -0
  40. package/dist/engine/RuleDependencyAnalyzer.d.ts.map +1 -0
  41. package/dist/engine/RuleDependencyAnalyzer.js +475 -0
  42. package/dist/engine/RuleDependencyAnalyzer.js.map +1 -0
  43. package/dist/engine/RulesEngine.d.ts +102 -3
  44. package/dist/engine/RulesEngine.d.ts.map +1 -1
  45. package/dist/engine/RulesEngine.js +326 -21
  46. package/dist/engine/RulesEngine.js.map +1 -1
  47. package/dist/engine/TaskManager.d.ts +11 -10
  48. package/dist/engine/TaskManager.d.ts.map +1 -1
  49. package/dist/engine/TaskManager.js +180 -195
  50. package/dist/engine/TaskManager.js.map +1 -1
  51. package/dist/engine/index.d.ts +3 -0
  52. package/dist/engine/index.d.ts.map +1 -1
  53. package/dist/engine/index.js +5 -0
  54. package/dist/engine/index.js.map +1 -1
  55. package/dist/rules/azure.d.ts.map +1 -1
  56. package/dist/rules/azure.js +12 -14
  57. package/dist/rules/azure.js.map +1 -1
  58. package/dist/rules/compliance.d.ts.map +1 -1
  59. package/dist/rules/compliance.js +23 -41
  60. package/dist/rules/compliance.js.map +1 -1
  61. package/dist/rules/condition-optimizer.d.ts +151 -0
  62. package/dist/rules/condition-optimizer.d.ts.map +1 -0
  63. package/dist/rules/condition-optimizer.js +479 -0
  64. package/dist/rules/condition-optimizer.js.map +1 -0
  65. package/dist/rules/css.d.ts.map +1 -1
  66. package/dist/rules/css.js +538 -0
  67. package/dist/rules/css.js.map +1 -1
  68. package/dist/rules/field-standards.d.ts +1172 -0
  69. package/dist/rules/field-standards.d.ts.map +1 -0
  70. package/dist/rules/field-standards.js +908 -0
  71. package/dist/rules/field-standards.js.map +1 -0
  72. package/dist/rules/flask.d.ts.map +1 -1
  73. package/dist/rules/flask.js +18 -31
  74. package/dist/rules/flask.js.map +1 -1
  75. package/dist/rules/index.d.ts +220 -0
  76. package/dist/rules/index.d.ts.map +1 -1
  77. package/dist/rules/index.js +155 -0
  78. package/dist/rules/index.js.map +1 -1
  79. package/dist/rules/ml-ai.d.ts.map +1 -1
  80. package/dist/rules/ml-ai.js +11 -13
  81. package/dist/rules/ml-ai.js.map +1 -1
  82. package/dist/rules/patterns.d.ts +568 -0
  83. package/dist/rules/patterns.d.ts.map +1 -0
  84. package/dist/rules/patterns.js +1359 -0
  85. package/dist/rules/patterns.js.map +1 -0
  86. package/dist/rules/security.d.ts.map +1 -1
  87. package/dist/rules/security.js +580 -19
  88. package/dist/rules/security.js.map +1 -1
  89. package/dist/rules/shared-patterns.d.ts +268 -0
  90. package/dist/rules/shared-patterns.d.ts.map +1 -0
  91. package/dist/rules/shared-patterns.js +556 -0
  92. package/dist/rules/shared-patterns.js.map +1 -0
  93. package/dist/rules/storage.d.ts +8 -2
  94. package/dist/rules/storage.d.ts.map +1 -1
  95. package/dist/rules/storage.js +541 -3
  96. package/dist/rules/storage.js.map +1 -1
  97. package/dist/rules/stripe.d.ts.map +1 -1
  98. package/dist/rules/stripe.js +19 -26
  99. package/dist/rules/stripe.js.map +1 -1
  100. package/dist/rules/websocket.d.ts.map +1 -1
  101. package/dist/rules/websocket.js +32 -40
  102. package/dist/rules/websocket.js.map +1 -1
  103. package/dist/server.d.ts.map +1 -1
  104. package/dist/server.js +96 -17
  105. package/dist/server.js.map +1 -1
  106. package/dist/supervisor/AgentSupervisor.d.ts +52 -0
  107. package/dist/supervisor/AgentSupervisor.d.ts.map +1 -1
  108. package/dist/supervisor/AgentSupervisor.js +120 -1
  109. package/dist/supervisor/AgentSupervisor.js.map +1 -1
  110. package/dist/supervisor/ManagedServerRegistry.d.ts +139 -2
  111. package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -1
  112. package/dist/supervisor/ManagedServerRegistry.js +590 -6
  113. package/dist/supervisor/ManagedServerRegistry.js.map +1 -1
  114. package/dist/supervisor/ProjectTracker.d.ts +24 -2
  115. package/dist/supervisor/ProjectTracker.d.ts.map +1 -1
  116. package/dist/supervisor/ProjectTracker.js +151 -59
  117. package/dist/supervisor/ProjectTracker.js.map +1 -1
  118. package/dist/testing/index.d.ts +11 -0
  119. package/dist/testing/index.d.ts.map +1 -0
  120. package/dist/testing/index.js +12 -0
  121. package/dist/testing/index.js.map +1 -0
  122. package/dist/testing/rule-tester.d.ts +217 -0
  123. package/dist/testing/rule-tester.d.ts.map +1 -0
  124. package/dist/testing/rule-tester.examples.d.ts +57 -0
  125. package/dist/testing/rule-tester.examples.d.ts.map +1 -0
  126. package/dist/testing/rule-tester.examples.js +375 -0
  127. package/dist/testing/rule-tester.examples.js.map +1 -0
  128. package/dist/testing/rule-tester.js +381 -0
  129. package/dist/testing/rule-tester.js.map +1 -0
  130. package/dist/testing/rule-validator.d.ts +141 -0
  131. package/dist/testing/rule-validator.d.ts.map +1 -0
  132. package/dist/testing/rule-validator.js +640 -0
  133. package/dist/testing/rule-validator.js.map +1 -0
  134. package/dist/types/index.d.ts +265 -4
  135. package/dist/types/index.d.ts.map +1 -1
  136. package/dist/types/index.js +57 -2
  137. package/dist/types/index.js.map +1 -1
  138. package/dist/utils/index.d.ts +2 -0
  139. package/dist/utils/index.d.ts.map +1 -1
  140. package/dist/utils/index.js +2 -0
  141. package/dist/utils/index.js.map +1 -1
  142. package/dist/utils/rate-limiting.d.ts +268 -0
  143. package/dist/utils/rate-limiting.d.ts.map +1 -0
  144. package/dist/utils/rate-limiting.js +403 -0
  145. package/dist/utils/rate-limiting.js.map +1 -0
  146. package/dist/utils/shared.d.ts +306 -0
  147. package/dist/utils/shared.d.ts.map +1 -0
  148. package/dist/utils/shared.js +464 -0
  149. package/dist/utils/shared.js.map +1 -0
  150. package/package.json +2 -1
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Rule Testing Framework
3
+ *
4
+ * Provides utilities for testing individual business rules and verifying their behavior.
5
+ */
6
+ import type { AgentAction, BusinessRule, BusinessContext, EvaluationResult, RiskLevel } from '../types/index.js';
7
+ /**
8
+ * Test case for rule evaluation
9
+ */
10
+ export interface RuleTestCase {
11
+ /** Unique test case identifier */
12
+ id?: string;
13
+ /** Human-readable description of what this test verifies */
14
+ description: string;
15
+ /** Input action to evaluate */
16
+ input: TestInput;
17
+ /** Expected evaluation result */
18
+ expectedResult: ExpectedResult;
19
+ /** Whether this test should be skipped */
20
+ skip?: boolean;
21
+ /** Whether this is the only test to run (for debugging) */
22
+ only?: boolean;
23
+ }
24
+ /**
25
+ * Input for a rule test case
26
+ */
27
+ export interface TestInput {
28
+ /** Agent action to evaluate */
29
+ action: Partial<AgentAction> & {
30
+ name: string;
31
+ category: AgentAction['category'];
32
+ };
33
+ /** Optional business context */
34
+ context?: Partial<BusinessContext>;
35
+ }
36
+ /**
37
+ * Expected result for a rule test case
38
+ */
39
+ export interface ExpectedResult {
40
+ /** Whether the rule should match */
41
+ shouldMatch: boolean;
42
+ /** Expected status (if rule matches) */
43
+ status?: EvaluationResult['status'];
44
+ /** Whether action should be allowed */
45
+ allowed?: boolean;
46
+ /** Expected risk level */
47
+ riskLevel?: RiskLevel;
48
+ /** Minimum risk score */
49
+ minRiskScore?: number;
50
+ /** Maximum risk score */
51
+ maxRiskScore?: number;
52
+ /** Whether human approval should be required */
53
+ requiresHumanApproval?: boolean;
54
+ /** Expected violation count */
55
+ violationCount?: number;
56
+ /** Expected warning count */
57
+ warningCount?: number;
58
+ /** Specific violation messages to check for */
59
+ violationMessages?: string[];
60
+ /** Specific warning messages to check for */
61
+ warningMessages?: string[];
62
+ }
63
+ /**
64
+ * Result of running a single test case
65
+ */
66
+ export interface TestCaseResult {
67
+ /** Test case ID */
68
+ testCaseId: string;
69
+ /** Test case description */
70
+ description: string;
71
+ /** Whether the test passed */
72
+ passed: boolean;
73
+ /** Test was skipped */
74
+ skipped: boolean;
75
+ /** Actual evaluation result */
76
+ actualResult?: EvaluationResult;
77
+ /** List of assertion failures */
78
+ failures: AssertionFailure[];
79
+ /** Execution time in ms */
80
+ durationMs: number;
81
+ }
82
+ /**
83
+ * Assertion failure details
84
+ */
85
+ export interface AssertionFailure {
86
+ /** What was being checked */
87
+ assertion: string;
88
+ /** Expected value */
89
+ expected: unknown;
90
+ /** Actual value */
91
+ actual: unknown;
92
+ /** Error message */
93
+ message: string;
94
+ }
95
+ /**
96
+ * Result of running all tests for a rule
97
+ */
98
+ export interface RuleTestResult {
99
+ /** Rule being tested */
100
+ ruleId: string;
101
+ /** Rule name */
102
+ ruleName: string;
103
+ /** Total test cases */
104
+ totalTests: number;
105
+ /** Passed test cases */
106
+ passedTests: number;
107
+ /** Failed test cases */
108
+ failedTests: number;
109
+ /** Skipped test cases */
110
+ skippedTests: number;
111
+ /** Individual test case results */
112
+ testCaseResults: TestCaseResult[];
113
+ /** Total execution time */
114
+ totalDurationMs: number;
115
+ }
116
+ /**
117
+ * RuleTester class for testing individual business rules
118
+ */
119
+ export declare class RuleTester {
120
+ private engine;
121
+ private verbose;
122
+ constructor(options?: {
123
+ verbose?: boolean;
124
+ });
125
+ /**
126
+ * Test a single rule against multiple test cases
127
+ */
128
+ testRule(rule: BusinessRule, testCases: RuleTestCase[]): RuleTestResult;
129
+ /**
130
+ * Run a single test case
131
+ */
132
+ private runTestCase;
133
+ /**
134
+ * Log a test failure in verbose mode
135
+ */
136
+ private logFailure;
137
+ }
138
+ /**
139
+ * Test a single rule against multiple test cases (convenience function)
140
+ */
141
+ export declare function testRule(rule: BusinessRule, testCases: RuleTestCase[]): RuleTestResult;
142
+ /**
143
+ * Create a test case with defaults
144
+ */
145
+ export declare function createTestCase(description: string, action: Partial<AgentAction> & {
146
+ name: string;
147
+ category: AgentAction['category'];
148
+ }, expectedResult: ExpectedResult, context?: Partial<BusinessContext>): RuleTestCase;
149
+ /**
150
+ * Create a test case that expects the rule to match and deny
151
+ */
152
+ export declare function expectDeny(description: string, action: Partial<AgentAction> & {
153
+ name: string;
154
+ category: AgentAction['category'];
155
+ }, options?: {
156
+ context?: Partial<BusinessContext>;
157
+ violationMessages?: string[];
158
+ }): RuleTestCase;
159
+ /**
160
+ * Create a test case that expects the rule to match and require approval
161
+ */
162
+ export declare function expectApproval(description: string, action: Partial<AgentAction> & {
163
+ name: string;
164
+ category: AgentAction['category'];
165
+ }, options?: {
166
+ context?: Partial<BusinessContext>;
167
+ }): RuleTestCase;
168
+ /**
169
+ * Create a test case that expects the rule to match and warn
170
+ */
171
+ export declare function expectWarn(description: string, action: Partial<AgentAction> & {
172
+ name: string;
173
+ category: AgentAction['category'];
174
+ }, options?: {
175
+ context?: Partial<BusinessContext>;
176
+ warningMessages?: string[];
177
+ }): RuleTestCase;
178
+ /**
179
+ * Create a test case that expects the rule NOT to match
180
+ */
181
+ export declare function expectNoMatch(description: string, action: Partial<AgentAction> & {
182
+ name: string;
183
+ category: AgentAction['category'];
184
+ }, context?: Partial<BusinessContext>): RuleTestCase;
185
+ /**
186
+ * Create a test case that expects the rule to match and allow
187
+ */
188
+ export declare function expectAllow(description: string, action: Partial<AgentAction> & {
189
+ name: string;
190
+ category: AgentAction['category'];
191
+ }, context?: Partial<BusinessContext>): RuleTestCase;
192
+ /**
193
+ * Assertion helpers for use with testing frameworks like vitest
194
+ */
195
+ export declare const assertions: {
196
+ /**
197
+ * Assert that a rule matches the given action
198
+ */
199
+ ruleMatches(rule: BusinessRule, action: AgentAction, context?: BusinessContext): boolean;
200
+ /**
201
+ * Assert that a rule denies the given action
202
+ */
203
+ ruleDenies(rule: BusinessRule, action: AgentAction, context?: BusinessContext): boolean;
204
+ /**
205
+ * Assert that a rule requires approval for the given action
206
+ */
207
+ ruleRequiresApproval(rule: BusinessRule, action: AgentAction, context?: BusinessContext): boolean;
208
+ /**
209
+ * Assert that a rule produces a warning for the given action
210
+ */
211
+ ruleWarns(rule: BusinessRule, action: AgentAction, context?: BusinessContext): boolean;
212
+ /**
213
+ * Assert that a rule allows the given action
214
+ */
215
+ ruleAllows(rule: BusinessRule, action: AgentAction, context?: BusinessContext): boolean;
216
+ };
217
+ //# sourceMappingURL=rule-tester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-tester.d.ts","sourceRoot":"","sources":["../../src/testing/rule-tester.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Rule Testing Framework Examples
3
+ *
4
+ * This file demonstrates how to use the RuleTester class to test business rules.
5
+ * These examples can be run with vitest or used as reference for writing your own tests.
6
+ */
7
+ import type { BusinessRule } from '../types/index.js';
8
+ /**
9
+ * Example security rule that blocks PII access without authorization
10
+ */
11
+ export declare const examplePiiAccessRule: BusinessRule;
12
+ /**
13
+ * Example rule that requires approval for production deployments
14
+ */
15
+ export declare const exampleProductionDeployRule: BusinessRule;
16
+ /**
17
+ * Example rule that warns about large data operations
18
+ */
19
+ export declare const exampleLargeDataWarningRule: BusinessRule;
20
+ /**
21
+ * Example rule with dependencies
22
+ */
23
+ export declare const exampleAuthCheckRule: BusinessRule;
24
+ export declare const exampleApiCallRule: BusinessRule;
25
+ /**
26
+ * Example: Testing PII access rule with RuleTester class
27
+ */
28
+ export declare function runPiiAccessRuleTests(): void;
29
+ /**
30
+ * Example: Using convenience functions for test cases
31
+ */
32
+ export declare function runProductionDeployTests(): void;
33
+ /**
34
+ * Example: Testing warning rules
35
+ */
36
+ export declare function runLargeDataWarningTests(): void;
37
+ /**
38
+ * Example: Using assertion helpers for vitest/jest integration
39
+ */
40
+ export declare function demonstrateAssertions(): void;
41
+ /**
42
+ * Example: Validating rule structure
43
+ */
44
+ export declare function demonstrateValidation(): void;
45
+ /**
46
+ * Example: Checking for rule conflicts
47
+ */
48
+ export declare function demonstrateConflictDetection(): void;
49
+ /**
50
+ * Example: Linting rules for best practices
51
+ */
52
+ export declare function demonstrateLinting(): void;
53
+ /**
54
+ * Run all examples to demonstrate the testing framework
55
+ */
56
+ export declare function runAllExamples(): void;
57
+ //# sourceMappingURL=rule-tester.examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-tester.examples.d.ts","sourceRoot":"","sources":["../../src/testing/rule-tester.examples.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,mBAAmB,CAAC;AAgBnE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAiBlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,YAiBzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,YAgBzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAgBlC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,YAmBhC,CAAC;AAMF;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAgF5C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CA0C/C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CA2B/C;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CA8B5C;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAiB5C;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAoCnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAsBzC;AAMD;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAiBrC"}
@@ -0,0 +1,375 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Rule Testing Framework Examples
3
+ *
4
+ * This file demonstrates how to use the RuleTester class to test business rules.
5
+ * These examples can be run with vitest or used as reference for writing your own tests.
6
+ */
7
+ import { RuleTester, testRule, createTestCase, expectApproval, expectWarn, expectNoMatch, assertions } from './rule-tester.js';
8
+ import { validateRule, checkForConflicts, lintRules } from './rule-validator.js';
9
+ // ============================================================================
10
+ // EXAMPLE RULE DEFINITIONS
11
+ // ============================================================================
12
+ /**
13
+ * Example security rule that blocks PII access without authorization
14
+ */
15
+ export const examplePiiAccessRule = {
16
+ id: 'example-pii-access',
17
+ name: 'Block PII Access Without Authorization',
18
+ description: 'Prevents unauthorized access to personally identifiable information',
19
+ type: 'security',
20
+ enabled: true,
21
+ priority: 950,
22
+ conditions: [
23
+ { field: 'actionCategory', operator: 'equals', value: 'pii_access' },
24
+ { field: 'userRole', operator: 'not_in', value: ['admin', 'data_officer', 'compliance'] }
25
+ ],
26
+ conditionLogic: 'all',
27
+ actions: [
28
+ { type: 'deny', message: 'PII access requires authorized role' }
29
+ ],
30
+ riskWeight: 45,
31
+ tags: ['pii', 'gdpr', 'privacy']
32
+ };
33
+ /**
34
+ * Example rule that requires approval for production deployments
35
+ */
36
+ export const exampleProductionDeployRule = {
37
+ id: 'example-prod-deploy',
38
+ name: 'Require Approval for Production Deployment',
39
+ description: 'Requires human approval for deploying to production',
40
+ type: 'operational',
41
+ enabled: true,
42
+ priority: 900,
43
+ conditions: [
44
+ { field: 'actionName', operator: 'contains', value: 'deploy' },
45
+ { field: 'environment', operator: 'equals', value: 'production' }
46
+ ],
47
+ conditionLogic: 'all',
48
+ actions: [
49
+ { type: 'require_approval', message: 'Production deployments require approval' }
50
+ ],
51
+ riskWeight: 35,
52
+ tags: ['deployment', 'production']
53
+ };
54
+ /**
55
+ * Example rule that warns about large data operations
56
+ */
57
+ export const exampleLargeDataWarningRule = {
58
+ id: 'example-large-data-warning',
59
+ name: 'Warn on Large Data Operations',
60
+ description: 'Warns when operating on more than 10,000 records',
61
+ type: 'data_governance',
62
+ enabled: true,
63
+ priority: 700,
64
+ conditions: [
65
+ { field: 'recordCount', operator: 'greater_than', value: 10000 }
66
+ ],
67
+ conditionLogic: 'all',
68
+ actions: [
69
+ { type: 'warn', message: 'Large data operation detected (>10,000 records)' }
70
+ ],
71
+ riskWeight: 15,
72
+ tags: ['data', 'performance']
73
+ };
74
+ /**
75
+ * Example rule with dependencies
76
+ */
77
+ export const exampleAuthCheckRule = {
78
+ id: 'example-auth-check',
79
+ name: 'Check Authentication First',
80
+ description: 'Base authentication check that other rules depend on',
81
+ type: 'security',
82
+ enabled: true,
83
+ priority: 1000,
84
+ conditions: [
85
+ { field: 'authToken', operator: 'not_exists', value: null }
86
+ ],
87
+ conditionLogic: 'all',
88
+ actions: [
89
+ { type: 'deny', message: 'Authentication required' }
90
+ ],
91
+ riskWeight: 50,
92
+ tags: ['authentication']
93
+ };
94
+ export const exampleApiCallRule = {
95
+ id: 'example-api-call',
96
+ name: 'API Call Logging',
97
+ description: 'Logs all external API calls',
98
+ type: 'operational',
99
+ enabled: true,
100
+ priority: 800,
101
+ conditions: [
102
+ { field: 'actionCategory', operator: 'equals', value: 'external_api' }
103
+ ],
104
+ conditionLogic: 'all',
105
+ actions: [
106
+ { type: 'log', message: 'External API call detected' },
107
+ { type: 'allow' }
108
+ ],
109
+ riskWeight: 10,
110
+ tags: ['api', 'logging'],
111
+ dependsOn: ['example-auth-check'], // Must check auth first
112
+ relatedRules: ['example-pii-access']
113
+ };
114
+ // ============================================================================
115
+ // EXAMPLE TEST CASES USING RuleTester
116
+ // ============================================================================
117
+ /**
118
+ * Example: Testing PII access rule with RuleTester class
119
+ */
120
+ export function runPiiAccessRuleTests() {
121
+ const tester = new RuleTester({ verbose: true });
122
+ const result = tester.testRule(examplePiiAccessRule, [
123
+ // Test 1: Should deny unauthorized user accessing PII
124
+ {
125
+ description: 'Should deny regular user accessing PII',
126
+ input: {
127
+ action: {
128
+ name: 'read_customer_data',
129
+ category: 'pii_access'
130
+ },
131
+ context: {
132
+ userRole: 'developer'
133
+ }
134
+ },
135
+ expectedResult: {
136
+ shouldMatch: true,
137
+ status: 'denied',
138
+ allowed: false,
139
+ violationCount: 1
140
+ }
141
+ },
142
+ // Test 2: Should allow admin to access PII
143
+ {
144
+ description: 'Should allow admin to access PII',
145
+ input: {
146
+ action: {
147
+ name: 'read_customer_data',
148
+ category: 'pii_access'
149
+ },
150
+ context: {
151
+ userRole: 'admin'
152
+ }
153
+ },
154
+ expectedResult: {
155
+ shouldMatch: false // Rule should not match for authorized users
156
+ }
157
+ },
158
+ // Test 3: Should allow data_officer to access PII
159
+ {
160
+ description: 'Should allow data_officer to access PII',
161
+ input: {
162
+ action: {
163
+ name: 'export_user_emails',
164
+ category: 'pii_access'
165
+ },
166
+ context: {
167
+ userRole: 'data_officer'
168
+ }
169
+ },
170
+ expectedResult: {
171
+ shouldMatch: false
172
+ }
173
+ },
174
+ // Test 4: Should not match non-PII access
175
+ {
176
+ description: 'Should not match non-PII data access',
177
+ input: {
178
+ action: {
179
+ name: 'read_public_stats',
180
+ category: 'data_access'
181
+ },
182
+ context: {
183
+ userRole: 'developer'
184
+ }
185
+ },
186
+ expectedResult: {
187
+ shouldMatch: false
188
+ }
189
+ }
190
+ ]);
191
+ console.log('\nPII Access Rule Test Results:');
192
+ console.log(` Total: ${result.totalTests}`);
193
+ console.log(` Passed: ${result.passedTests}`);
194
+ console.log(` Failed: ${result.failedTests}`);
195
+ }
196
+ /**
197
+ * Example: Using convenience functions for test cases
198
+ */
199
+ export function runProductionDeployTests() {
200
+ const result = testRule(exampleProductionDeployRule, [
201
+ // Using expectApproval helper
202
+ expectApproval('Should require approval for production deployment', {
203
+ name: 'deploy_service',
204
+ category: 'code_execution'
205
+ }, { context: { environment: 'production' } }),
206
+ // Using expectNoMatch helper
207
+ expectNoMatch('Should not require approval for staging deployment', {
208
+ name: 'deploy_service',
209
+ category: 'code_execution'
210
+ }, { environment: 'staging' }),
211
+ // Using createTestCase for custom expectations
212
+ createTestCase('Should require approval only when deploying to production', {
213
+ name: 'deploy_application',
214
+ category: 'code_execution'
215
+ }, {
216
+ shouldMatch: true,
217
+ status: 'pending_approval',
218
+ requiresHumanApproval: true
219
+ }, { environment: 'production' })
220
+ ]);
221
+ console.log('\nProduction Deploy Rule Test Results:');
222
+ console.log(` Total: ${result.totalTests}`);
223
+ console.log(` Passed: ${result.passedTests}`);
224
+ console.log(` Failed: ${result.failedTests}`);
225
+ }
226
+ /**
227
+ * Example: Testing warning rules
228
+ */
229
+ export function runLargeDataWarningTests() {
230
+ const result = testRule(exampleLargeDataWarningRule, [
231
+ // Using expectWarn helper
232
+ expectWarn('Should warn for large data operations', {
233
+ name: 'bulk_update',
234
+ category: 'data_modification',
235
+ parameters: { recordCount: 50000 }
236
+ }),
237
+ // Should not warn for small operations
238
+ expectNoMatch('Should not warn for small data operations', {
239
+ name: 'update_record',
240
+ category: 'data_modification',
241
+ parameters: { recordCount: 100 }
242
+ })
243
+ ]);
244
+ console.log('\nLarge Data Warning Rule Test Results:');
245
+ console.log(` Total: ${result.totalTests}`);
246
+ console.log(` Passed: ${result.passedTests}`);
247
+ console.log(` Failed: ${result.failedTests}`);
248
+ }
249
+ // ============================================================================
250
+ // EXAMPLE: USING ASSERTION HELPERS
251
+ // ============================================================================
252
+ /**
253
+ * Example: Using assertion helpers for vitest/jest integration
254
+ */
255
+ export function demonstrateAssertions() {
256
+ const action = {
257
+ name: 'read_customer_data',
258
+ category: 'pii_access'
259
+ };
260
+ const unauthorizedContext = { userRole: 'developer' };
261
+ const authorizedContext = { userRole: 'admin' };
262
+ // Using assertion helpers
263
+ const matchesUnauthorized = assertions.ruleMatches(examplePiiAccessRule, action, unauthorizedContext);
264
+ console.log(`Rule matches unauthorized access: ${matchesUnauthorized}`); // true
265
+ const matchesAuthorized = assertions.ruleMatches(examplePiiAccessRule, action, authorizedContext);
266
+ console.log(`Rule matches authorized access: ${matchesAuthorized}`); // false
267
+ const deniesUnauthorized = assertions.ruleDenies(examplePiiAccessRule, action, unauthorizedContext);
268
+ console.log(`Rule denies unauthorized access: ${deniesUnauthorized}`); // true
269
+ }
270
+ // ============================================================================
271
+ // EXAMPLE: RULE VALIDATION
272
+ // ============================================================================
273
+ /**
274
+ * Example: Validating rule structure
275
+ */
276
+ export function demonstrateValidation() {
277
+ // Valid rule
278
+ const validResult = validateRule(examplePiiAccessRule);
279
+ console.log('\nValid rule validation:');
280
+ console.log(` Is valid: ${validResult.isValid}`);
281
+ console.log(` Errors: ${validResult.errors.length}`);
282
+ console.log(` Warnings: ${validResult.warnings.length}`);
283
+ // Invalid rule (missing required fields)
284
+ const invalidRule = {
285
+ id: 'invalid-rule',
286
+ // Missing name, type, conditions, actions
287
+ };
288
+ const invalidResult = validateRule(invalidRule);
289
+ console.log('\nInvalid rule validation:');
290
+ console.log(` Is valid: ${invalidResult.isValid}`);
291
+ console.log(` Errors: ${invalidResult.errors.map(e => e.message).join(', ')}`);
292
+ }
293
+ /**
294
+ * Example: Checking for rule conflicts
295
+ */
296
+ export function demonstrateConflictDetection() {
297
+ // Create two rules with conflicting actions
298
+ const rule1 = {
299
+ id: 'conflict-allow',
300
+ name: 'Allow API Calls',
301
+ type: 'operational',
302
+ enabled: true,
303
+ priority: 500,
304
+ conditions: [
305
+ { field: 'actionCategory', operator: 'equals', value: 'external_api' }
306
+ ],
307
+ conditionLogic: 'all',
308
+ actions: [{ type: 'allow' }],
309
+ riskWeight: 0
310
+ };
311
+ const rule2 = {
312
+ id: 'conflict-deny',
313
+ name: 'Deny API Calls',
314
+ type: 'security',
315
+ enabled: true,
316
+ priority: 500,
317
+ conditions: [
318
+ { field: 'actionCategory', operator: 'equals', value: 'external_api' }
319
+ ],
320
+ conditionLogic: 'all',
321
+ actions: [{ type: 'deny' }],
322
+ riskWeight: 50
323
+ };
324
+ const conflictResult = checkForConflicts([rule1, rule2]);
325
+ console.log('\nConflict detection:');
326
+ console.log(` Has conflicts: ${conflictResult.hasConflicts}`);
327
+ for (const conflict of conflictResult.conflicts) {
328
+ console.log(` - ${conflict.conflictType}: ${conflict.description}`);
329
+ }
330
+ }
331
+ /**
332
+ * Example: Linting rules for best practices
333
+ */
334
+ export function demonstrateLinting() {
335
+ const rules = [
336
+ examplePiiAccessRule,
337
+ exampleProductionDeployRule,
338
+ exampleLargeDataWarningRule,
339
+ exampleAuthCheckRule,
340
+ exampleApiCallRule
341
+ ];
342
+ const lintResult = lintRules(rules);
343
+ console.log('\nLint results:');
344
+ console.log(` Total issues: ${lintResult.totalIssues}`);
345
+ console.log(` Errors: ${lintResult.errors.length}`);
346
+ console.log(` Warnings: ${lintResult.warnings.length}`);
347
+ console.log(` Suggestions: ${lintResult.suggestions.length}`);
348
+ for (const error of lintResult.errors) {
349
+ console.log(` [ERROR] ${error.ruleId}: ${error.message}`);
350
+ }
351
+ for (const warning of lintResult.warnings) {
352
+ console.log(` [WARN] ${warning.ruleId}: ${warning.message}`);
353
+ }
354
+ }
355
+ // ============================================================================
356
+ // RUN ALL EXAMPLES
357
+ // ============================================================================
358
+ /**
359
+ * Run all examples to demonstrate the testing framework
360
+ */
361
+ export function runAllExamples() {
362
+ console.log('=== Rule Testing Framework Examples ===\n');
363
+ console.log('--- Test Case Examples ---');
364
+ runPiiAccessRuleTests();
365
+ runProductionDeployTests();
366
+ runLargeDataWarningTests();
367
+ console.log('\n--- Assertion Helpers ---');
368
+ demonstrateAssertions();
369
+ console.log('\n--- Validation Examples ---');
370
+ demonstrateValidation();
371
+ demonstrateConflictDetection();
372
+ demonstrateLinting();
373
+ console.log('\n=== Examples Complete ===');
374
+ }
375
+ //# sourceMappingURL=rule-tester.examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-tester.examples.js","sourceRoot":"","sources":["../../src/testing/rule-tester.examples.ts"],"names":[],"mappings":"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"}