@trentapps/manager-protocol 1.3.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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +639 -0
  3. package/dist/analyzers/ArchitectureDetector.d.ts +44 -0
  4. package/dist/analyzers/ArchitectureDetector.d.ts.map +1 -0
  5. package/dist/analyzers/ArchitectureDetector.js +218 -0
  6. package/dist/analyzers/ArchitectureDetector.js.map +1 -0
  7. package/dist/analyzers/CSSAnalyzer.d.ts +284 -0
  8. package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -0
  9. package/dist/analyzers/CSSAnalyzer.js +1180 -0
  10. package/dist/analyzers/CSSAnalyzer.js.map +1 -0
  11. package/dist/analyzers/index.d.ts +5 -0
  12. package/dist/analyzers/index.d.ts.map +1 -0
  13. package/dist/analyzers/index.js +5 -0
  14. package/dist/analyzers/index.js.map +1 -0
  15. package/dist/cli.d.ts +8 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +174 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/design-system/index.d.ts +6 -0
  20. package/dist/design-system/index.d.ts.map +1 -0
  21. package/dist/design-system/index.js +6 -0
  22. package/dist/design-system/index.js.map +1 -0
  23. package/dist/design-system/tokens.d.ts +106 -0
  24. package/dist/design-system/tokens.d.ts.map +1 -0
  25. package/dist/design-system/tokens.js +554 -0
  26. package/dist/design-system/tokens.js.map +1 -0
  27. package/dist/engine/AuditLogger.d.ts +506 -0
  28. package/dist/engine/AuditLogger.d.ts.map +1 -0
  29. package/dist/engine/AuditLogger.js +1491 -0
  30. package/dist/engine/AuditLogger.js.map +1 -0
  31. package/dist/engine/GitHubApprovalManager.d.ts +123 -0
  32. package/dist/engine/GitHubApprovalManager.d.ts.map +1 -0
  33. package/dist/engine/GitHubApprovalManager.js +347 -0
  34. package/dist/engine/GitHubApprovalManager.js.map +1 -0
  35. package/dist/engine/GitHubClient.d.ts +183 -0
  36. package/dist/engine/GitHubClient.d.ts.map +1 -0
  37. package/dist/engine/GitHubClient.js +411 -0
  38. package/dist/engine/GitHubClient.js.map +1 -0
  39. package/dist/engine/RateLimiter.d.ts +81 -0
  40. package/dist/engine/RateLimiter.d.ts.map +1 -0
  41. package/dist/engine/RateLimiter.js +215 -0
  42. package/dist/engine/RateLimiter.js.map +1 -0
  43. package/dist/engine/RuleDependencyAnalyzer.d.ts +73 -0
  44. package/dist/engine/RuleDependencyAnalyzer.d.ts.map +1 -0
  45. package/dist/engine/RuleDependencyAnalyzer.js +475 -0
  46. package/dist/engine/RuleDependencyAnalyzer.js.map +1 -0
  47. package/dist/engine/RulesEngine.d.ts +176 -0
  48. package/dist/engine/RulesEngine.d.ts.map +1 -0
  49. package/dist/engine/RulesEngine.js +705 -0
  50. package/dist/engine/RulesEngine.js.map +1 -0
  51. package/dist/engine/TaskManager.d.ts +174 -0
  52. package/dist/engine/TaskManager.d.ts.map +1 -0
  53. package/dist/engine/TaskManager.js +663 -0
  54. package/dist/engine/TaskManager.js.map +1 -0
  55. package/dist/engine/index.d.ts +11 -0
  56. package/dist/engine/index.d.ts.map +1 -0
  57. package/dist/engine/index.js +13 -0
  58. package/dist/engine/index.js.map +1 -0
  59. package/dist/index.d.ts +21 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +29 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/rules/architecture.d.ts +9 -0
  64. package/dist/rules/architecture.d.ts.map +1 -0
  65. package/dist/rules/architecture.js +322 -0
  66. package/dist/rules/architecture.js.map +1 -0
  67. package/dist/rules/azure.d.ts +7 -0
  68. package/dist/rules/azure.d.ts.map +1 -0
  69. package/dist/rules/azure.js +136 -0
  70. package/dist/rules/azure.js.map +1 -0
  71. package/dist/rules/compliance.d.ts +9 -0
  72. package/dist/rules/compliance.d.ts.map +1 -0
  73. package/dist/rules/compliance.js +286 -0
  74. package/dist/rules/compliance.js.map +1 -0
  75. package/dist/rules/condition-optimizer.d.ts +151 -0
  76. package/dist/rules/condition-optimizer.d.ts.map +1 -0
  77. package/dist/rules/condition-optimizer.js +479 -0
  78. package/dist/rules/condition-optimizer.js.map +1 -0
  79. package/dist/rules/css.d.ts +10 -0
  80. package/dist/rules/css.d.ts.map +1 -0
  81. package/dist/rules/css.js +1777 -0
  82. package/dist/rules/css.js.map +1 -0
  83. package/dist/rules/field-standards.d.ts +1172 -0
  84. package/dist/rules/field-standards.d.ts.map +1 -0
  85. package/dist/rules/field-standards.js +908 -0
  86. package/dist/rules/field-standards.js.map +1 -0
  87. package/dist/rules/flask.d.ts +7 -0
  88. package/dist/rules/flask.d.ts.map +1 -0
  89. package/dist/rules/flask.js +142 -0
  90. package/dist/rules/flask.js.map +1 -0
  91. package/dist/rules/index.d.ts +827 -0
  92. package/dist/rules/index.d.ts.map +1 -0
  93. package/dist/rules/index.js +556 -0
  94. package/dist/rules/index.js.map +1 -0
  95. package/dist/rules/ml-ai.d.ts +7 -0
  96. package/dist/rules/ml-ai.d.ts.map +1 -0
  97. package/dist/rules/ml-ai.js +148 -0
  98. package/dist/rules/ml-ai.js.map +1 -0
  99. package/dist/rules/operational.d.ts +9 -0
  100. package/dist/rules/operational.d.ts.map +1 -0
  101. package/dist/rules/operational.js +318 -0
  102. package/dist/rules/operational.js.map +1 -0
  103. package/dist/rules/patterns.d.ts +568 -0
  104. package/dist/rules/patterns.d.ts.map +1 -0
  105. package/dist/rules/patterns.js +1359 -0
  106. package/dist/rules/patterns.js.map +1 -0
  107. package/dist/rules/security.d.ts +9 -0
  108. package/dist/rules/security.d.ts.map +1 -0
  109. package/dist/rules/security.js +848 -0
  110. package/dist/rules/security.js.map +1 -0
  111. package/dist/rules/shared-patterns.d.ts +268 -0
  112. package/dist/rules/shared-patterns.d.ts.map +1 -0
  113. package/dist/rules/shared-patterns.js +556 -0
  114. package/dist/rules/shared-patterns.js.map +1 -0
  115. package/dist/rules/storage.d.ts +13 -0
  116. package/dist/rules/storage.d.ts.map +1 -0
  117. package/dist/rules/storage.js +672 -0
  118. package/dist/rules/storage.js.map +1 -0
  119. package/dist/rules/stripe.d.ts +7 -0
  120. package/dist/rules/stripe.d.ts.map +1 -0
  121. package/dist/rules/stripe.js +133 -0
  122. package/dist/rules/stripe.js.map +1 -0
  123. package/dist/rules/testing.d.ts +7 -0
  124. package/dist/rules/testing.d.ts.map +1 -0
  125. package/dist/rules/testing.js +135 -0
  126. package/dist/rules/testing.js.map +1 -0
  127. package/dist/rules/ux.d.ts +9 -0
  128. package/dist/rules/ux.d.ts.map +1 -0
  129. package/dist/rules/ux.js +280 -0
  130. package/dist/rules/ux.js.map +1 -0
  131. package/dist/rules/websocket.d.ts +7 -0
  132. package/dist/rules/websocket.d.ts.map +1 -0
  133. package/dist/rules/websocket.js +128 -0
  134. package/dist/rules/websocket.js.map +1 -0
  135. package/dist/server.d.ts +43 -0
  136. package/dist/server.d.ts.map +1 -0
  137. package/dist/server.js +1967 -0
  138. package/dist/server.js.map +1 -0
  139. package/dist/supervisor/AgentSupervisor.d.ts +195 -0
  140. package/dist/supervisor/AgentSupervisor.d.ts.map +1 -0
  141. package/dist/supervisor/AgentSupervisor.js +569 -0
  142. package/dist/supervisor/AgentSupervisor.js.map +1 -0
  143. package/dist/supervisor/ManagedServerRegistry.d.ts +185 -0
  144. package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -0
  145. package/dist/supervisor/ManagedServerRegistry.js +729 -0
  146. package/dist/supervisor/ManagedServerRegistry.js.map +1 -0
  147. package/dist/supervisor/ProjectTracker.d.ts +210 -0
  148. package/dist/supervisor/ProjectTracker.d.ts.map +1 -0
  149. package/dist/supervisor/ProjectTracker.js +709 -0
  150. package/dist/supervisor/ProjectTracker.js.map +1 -0
  151. package/dist/supervisor/index.d.ts +6 -0
  152. package/dist/supervisor/index.d.ts.map +1 -0
  153. package/dist/supervisor/index.js +6 -0
  154. package/dist/supervisor/index.js.map +1 -0
  155. package/dist/testing/index.d.ts +11 -0
  156. package/dist/testing/index.d.ts.map +1 -0
  157. package/dist/testing/index.js +12 -0
  158. package/dist/testing/index.js.map +1 -0
  159. package/dist/testing/rule-tester.d.ts +217 -0
  160. package/dist/testing/rule-tester.d.ts.map +1 -0
  161. package/dist/testing/rule-tester.examples.d.ts +57 -0
  162. package/dist/testing/rule-tester.examples.d.ts.map +1 -0
  163. package/dist/testing/rule-tester.examples.js +375 -0
  164. package/dist/testing/rule-tester.examples.js.map +1 -0
  165. package/dist/testing/rule-tester.js +381 -0
  166. package/dist/testing/rule-tester.js.map +1 -0
  167. package/dist/testing/rule-validator.d.ts +141 -0
  168. package/dist/testing/rule-validator.d.ts.map +1 -0
  169. package/dist/testing/rule-validator.js +640 -0
  170. package/dist/testing/rule-validator.js.map +1 -0
  171. package/dist/types/index.d.ts +1282 -0
  172. package/dist/types/index.d.ts.map +1 -0
  173. package/dist/types/index.js +386 -0
  174. package/dist/types/index.js.map +1 -0
  175. package/dist/utils/errors.d.ts +86 -0
  176. package/dist/utils/errors.d.ts.map +1 -0
  177. package/dist/utils/errors.js +171 -0
  178. package/dist/utils/errors.js.map +1 -0
  179. package/dist/utils/index.d.ts +7 -0
  180. package/dist/utils/index.d.ts.map +1 -0
  181. package/dist/utils/index.js +7 -0
  182. package/dist/utils/index.js.map +1 -0
  183. package/dist/utils/rate-limiting.d.ts +268 -0
  184. package/dist/utils/rate-limiting.d.ts.map +1 -0
  185. package/dist/utils/rate-limiting.js +403 -0
  186. package/dist/utils/rate-limiting.js.map +1 -0
  187. package/dist/utils/shared.d.ts +306 -0
  188. package/dist/utils/shared.d.ts.map +1 -0
  189. package/dist/utils/shared.js +464 -0
  190. package/dist/utils/shared.js.map +1 -0
  191. package/dist/utils/shell.d.ts +22 -0
  192. package/dist/utils/shell.d.ts.map +1 -0
  193. package/dist/utils/shell.js +29 -0
  194. package/dist/utils/shell.js.map +1 -0
  195. package/package.json +67 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Error Utilities
3
+ *
4
+ * Provides custom error types and error handling utilities.
5
+ */
6
+ /**
7
+ * Base error class for Agent Supervisor errors
8
+ */
9
+ export class AgentSupervisorError extends Error {
10
+ code;
11
+ details;
12
+ constructor(message, code, details) {
13
+ super(message);
14
+ this.name = 'AgentSupervisorError';
15
+ this.code = code;
16
+ this.details = details;
17
+ // Maintains proper stack trace for where our error was thrown
18
+ if (Error.captureStackTrace) {
19
+ Error.captureStackTrace(this, AgentSupervisorError);
20
+ }
21
+ }
22
+ }
23
+ /**
24
+ * Error thrown when a rule validation fails
25
+ */
26
+ export class RuleValidationError extends AgentSupervisorError {
27
+ constructor(message, details) {
28
+ super(message, 'RULE_VALIDATION_ERROR', details);
29
+ this.name = 'RuleValidationError';
30
+ }
31
+ }
32
+ /**
33
+ * Error thrown when a rule is not found
34
+ */
35
+ export class RuleNotFoundError extends AgentSupervisorError {
36
+ constructor(ruleId) {
37
+ super(`Rule not found: ${ruleId}`, 'RULE_NOT_FOUND', { ruleId });
38
+ this.name = 'RuleNotFoundError';
39
+ }
40
+ }
41
+ /**
42
+ * Error thrown when rate limit is exceeded
43
+ */
44
+ export class RateLimitExceededError extends AgentSupervisorError {
45
+ resetAt;
46
+ remaining;
47
+ constructor(limitId, resetAt, remaining = 0) {
48
+ super(`Rate limit exceeded: ${limitId}`, 'RATE_LIMIT_EXCEEDED', {
49
+ limitId,
50
+ resetAt: resetAt.toISOString(),
51
+ remaining
52
+ });
53
+ this.name = 'RateLimitExceededError';
54
+ this.resetAt = resetAt;
55
+ this.remaining = remaining;
56
+ }
57
+ }
58
+ /**
59
+ * Error thrown when an approval request is not found
60
+ */
61
+ export class ApprovalNotFoundError extends AgentSupervisorError {
62
+ constructor(requestId) {
63
+ super(`Approval request not found: ${requestId}`, 'APPROVAL_NOT_FOUND', { requestId });
64
+ this.name = 'ApprovalNotFoundError';
65
+ }
66
+ }
67
+ /**
68
+ * Error thrown when an approval request has expired
69
+ */
70
+ export class ApprovalExpiredError extends AgentSupervisorError {
71
+ constructor(requestId, expiredAt) {
72
+ super(`Approval request expired: ${requestId}`, 'APPROVAL_EXPIRED', { requestId, expiredAt });
73
+ this.name = 'ApprovalExpiredError';
74
+ }
75
+ }
76
+ /**
77
+ * Error thrown for configuration errors
78
+ */
79
+ export class ConfigurationError extends AgentSupervisorError {
80
+ constructor(message, details) {
81
+ super(message, 'CONFIGURATION_ERROR', details);
82
+ this.name = 'ConfigurationError';
83
+ }
84
+ }
85
+ /**
86
+ * Error thrown when webhook delivery fails
87
+ */
88
+ export class WebhookDeliveryError extends AgentSupervisorError {
89
+ url;
90
+ statusCode;
91
+ retryCount;
92
+ constructor(url, cause, statusCode, retryCount = 0) {
93
+ const message = typeof cause === 'string' ? cause : cause.message;
94
+ super(`Webhook delivery failed: ${message}`, 'WEBHOOK_DELIVERY_ERROR', {
95
+ url,
96
+ statusCode,
97
+ retryCount
98
+ });
99
+ this.name = 'WebhookDeliveryError';
100
+ this.url = url;
101
+ this.statusCode = statusCode;
102
+ this.retryCount = retryCount;
103
+ }
104
+ }
105
+ const DEFAULT_RETRY_OPTIONS = {
106
+ maxRetries: 3,
107
+ initialDelayMs: 1000,
108
+ maxDelayMs: 30000,
109
+ backoffMultiplier: 2
110
+ };
111
+ /**
112
+ * Execute a function with retry logic and exponential backoff
113
+ */
114
+ export async function withRetry(fn, options = {}) {
115
+ const opts = { ...DEFAULT_RETRY_OPTIONS, ...options };
116
+ let lastError;
117
+ let delay = opts.initialDelayMs;
118
+ for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
119
+ try {
120
+ return await fn();
121
+ }
122
+ catch (error) {
123
+ lastError = error instanceof Error ? error : new Error(String(error));
124
+ if (attempt < opts.maxRetries) {
125
+ await sleep(delay);
126
+ delay = Math.min(delay * opts.backoffMultiplier, opts.maxDelayMs);
127
+ }
128
+ }
129
+ }
130
+ throw lastError;
131
+ }
132
+ /**
133
+ * Sleep for a specified number of milliseconds
134
+ */
135
+ function sleep(ms) {
136
+ return new Promise(resolve => setTimeout(resolve, ms));
137
+ }
138
+ /**
139
+ * Type guard for checking if an error is an AgentSupervisorError
140
+ */
141
+ export function isAgentSupervisorError(error) {
142
+ return error instanceof AgentSupervisorError;
143
+ }
144
+ /**
145
+ * Format an error for logging
146
+ */
147
+ export function formatError(error) {
148
+ if (error instanceof AgentSupervisorError) {
149
+ return `[${error.code}] ${error.message}${error.details ? ` - ${JSON.stringify(error.details)}` : ''}`;
150
+ }
151
+ if (error instanceof Error) {
152
+ return error.message;
153
+ }
154
+ return String(error);
155
+ }
156
+ /**
157
+ * Safe JSON stringify that handles circular references
158
+ */
159
+ export function safeStringify(obj) {
160
+ const seen = new WeakSet();
161
+ return JSON.stringify(obj, (_key, value) => {
162
+ if (typeof value === 'object' && value !== null) {
163
+ if (seen.has(value)) {
164
+ return '[Circular]';
165
+ }
166
+ seen.add(value);
167
+ }
168
+ return value;
169
+ });
170
+ }
171
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Utility Exports
3
+ */
4
+ export * from './errors.js';
5
+ export * from './shared.js';
6
+ export * from './rate-limiting.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Utility Exports
3
+ */
4
+ export * from './errors.js';
5
+ export * from './shared.js';
6
+ export * from './rate-limiting.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Enterprise Agent Supervisor - Rate Limiting Utilities
3
+ *
4
+ * Reusable utilities for rate limiting:
5
+ * - Bucket key building for different scopes
6
+ * - Sliding window time-based tracking
7
+ */
8
+ /**
9
+ * Scope types for rate limit bucket keys
10
+ */
11
+ export type BucketScope = 'global' | 'agent' | 'session' | 'user' | 'action_type';
12
+ /**
13
+ * Identifiers used to build bucket keys
14
+ */
15
+ export interface BucketIdentifiers {
16
+ agentId?: string;
17
+ sessionId?: string;
18
+ userId?: string;
19
+ actionType?: string;
20
+ }
21
+ /**
22
+ * Window algorithm types
23
+ */
24
+ export type WindowAlgorithm = 'fixed' | 'sliding';
25
+ /**
26
+ * Statistics for a time window
27
+ */
28
+ export interface WindowStats {
29
+ /** Number of requests in the current window */
30
+ count: number;
31
+ /** Number of requests remaining before limit */
32
+ remaining: number;
33
+ /** Timestamp when the window started (ms since epoch) */
34
+ windowStart: number;
35
+ /** Timestamp when the window resets (ms since epoch) */
36
+ resetAt: number;
37
+ /** ISO string of reset time */
38
+ resetAtISO: string;
39
+ /** Whether the limit has been exceeded */
40
+ exceeded: boolean;
41
+ /** Percentage of limit used (0-100) */
42
+ usagePercent: number;
43
+ }
44
+ /**
45
+ * Configuration for SlidingWindow
46
+ */
47
+ export interface SlidingWindowConfig {
48
+ /** Window duration in milliseconds */
49
+ windowMs: number;
50
+ /** Maximum requests allowed in the window */
51
+ maxRequests: number;
52
+ /** Optional burst limit for short-term spikes */
53
+ burstLimit?: number;
54
+ /** Window algorithm: 'fixed' resets at boundaries, 'sliding' moves with time */
55
+ algorithm?: WindowAlgorithm;
56
+ }
57
+ /**
58
+ * Build a bucket key based on scope and identifiers.
59
+ *
60
+ * Key format: `{prefix}:{scope}:{identifier}`
61
+ *
62
+ * This creates consistent, collision-free keys for rate limit buckets.
63
+ *
64
+ * @param scope - The scope for the bucket (global, agent, session, user, action_type)
65
+ * @param identifiers - Object containing identifier values
66
+ * @param prefix - Optional prefix for namespacing (e.g., config ID)
67
+ * @returns A unique bucket key string
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * // Global scope
72
+ * buildBucketKey('global', {}) // "global"
73
+ * buildBucketKey('global', {}, 'rate-1') // "rate-1:global"
74
+ *
75
+ * // Agent scope
76
+ * buildBucketKey('agent', { agentId: 'agent-123' }) // "agent:agent-123"
77
+ *
78
+ * // Session scope with prefix
79
+ * buildBucketKey('session', { sessionId: 'sess-456' }, 'api-limit')
80
+ * // "api-limit:session:sess-456"
81
+ * ```
82
+ */
83
+ export declare function buildBucketKey(scope: BucketScope, identifiers: BucketIdentifiers, prefix?: string): string;
84
+ /**
85
+ * Parse a bucket key to extract scope and identifier.
86
+ *
87
+ * @param key - The bucket key to parse
88
+ * @returns Object with scope and identifier, or null if invalid
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * parseBucketKey('rate-1:agent:agent-123')
93
+ * // { prefix: 'rate-1', scope: 'agent', identifier: 'agent-123' }
94
+ *
95
+ * parseBucketKey('global')
96
+ * // { prefix: undefined, scope: 'global', identifier: undefined }
97
+ * ```
98
+ */
99
+ export declare function parseBucketKey(key: string): {
100
+ prefix?: string;
101
+ scope: BucketScope | 'unknown';
102
+ identifier?: string;
103
+ } | null;
104
+ /**
105
+ * SlidingWindow class for time-based window tracking.
106
+ *
107
+ * Supports both fixed and sliding window algorithms:
108
+ * - Fixed: Window resets at fixed boundaries (simpler, less memory)
109
+ * - Sliding: Window slides with time (more accurate, tracks individual requests)
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * // Create a window: 100 requests per minute
114
+ * const window = new SlidingWindow({
115
+ * windowMs: 60000,
116
+ * maxRequests: 100,
117
+ * algorithm: 'fixed'
118
+ * });
119
+ *
120
+ * // Check and record a request
121
+ * if (window.canAccept()) {
122
+ * window.record();
123
+ * // Process request
124
+ * } else {
125
+ * // Rate limited
126
+ * const stats = window.getStats();
127
+ * console.log(`Retry after ${stats.resetAt}`);
128
+ * }
129
+ * ```
130
+ */
131
+ export declare class SlidingWindow {
132
+ private config;
133
+ private count;
134
+ private burstCount;
135
+ private windowStart;
136
+ private requestTimestamps;
137
+ constructor(config: SlidingWindowConfig);
138
+ /**
139
+ * Check if the window has expired and needs reset.
140
+ *
141
+ * For fixed windows: Checks if current time is past window boundary.
142
+ * For sliding windows: Always returns false (sliding handles this differently).
143
+ *
144
+ * @param now - Current timestamp (defaults to Date.now())
145
+ * @returns Whether the window has expired
146
+ */
147
+ isExpired(now?: number): boolean;
148
+ /**
149
+ * Reset the window to initial state.
150
+ *
151
+ * @param now - Timestamp to use as new window start (defaults to Date.now())
152
+ */
153
+ reset(now?: number): void;
154
+ /**
155
+ * Check if the window can accept another request.
156
+ * Automatically resets expired windows (for fixed algorithm).
157
+ *
158
+ * @param now - Current timestamp (defaults to Date.now())
159
+ * @returns Whether a request can be accepted
160
+ */
161
+ canAccept(now?: number): boolean;
162
+ /**
163
+ * Check if the window can accept based on burst limit only.
164
+ *
165
+ * @param now - Current timestamp (defaults to Date.now())
166
+ * @returns Whether burst limit allows acceptance
167
+ */
168
+ canAcceptBurst(now?: number): boolean;
169
+ /**
170
+ * Record a request in the window.
171
+ *
172
+ * @param now - Current timestamp (defaults to Date.now())
173
+ */
174
+ record(now?: number): void;
175
+ /**
176
+ * Get current window statistics.
177
+ *
178
+ * @param now - Current timestamp (defaults to Date.now())
179
+ * @returns WindowStats object with current state
180
+ */
181
+ getStats(now?: number): WindowStats;
182
+ /**
183
+ * Get the current count of requests in the window.
184
+ *
185
+ * @param now - Current timestamp (defaults to Date.now())
186
+ * @returns Current request count
187
+ */
188
+ getCount(now?: number): number;
189
+ /**
190
+ * Get remaining requests before limit is hit.
191
+ *
192
+ * @param now - Current timestamp (defaults to Date.now())
193
+ * @returns Number of remaining requests
194
+ */
195
+ getRemaining(now?: number): number;
196
+ /**
197
+ * Get timestamp when the window resets.
198
+ *
199
+ * @returns Reset timestamp in milliseconds since epoch
200
+ */
201
+ getResetTime(): number;
202
+ /**
203
+ * Get the window configuration.
204
+ *
205
+ * @returns The window configuration
206
+ */
207
+ getConfig(): Required<SlidingWindowConfig>;
208
+ /**
209
+ * Set internal state (useful for persistence/restoration).
210
+ *
211
+ * @param state - State to restore
212
+ */
213
+ setState(state: {
214
+ count: number;
215
+ windowStart: number;
216
+ burstCount?: number;
217
+ }): void;
218
+ /**
219
+ * Get internal state (useful for persistence).
220
+ *
221
+ * @returns Current internal state
222
+ */
223
+ getState(): {
224
+ count: number;
225
+ windowStart: number;
226
+ burstCount: number;
227
+ };
228
+ private maybeResetWindow;
229
+ private getSlidingCount;
230
+ private cleanupOldTimestamps;
231
+ }
232
+ /**
233
+ * Create a sliding window with common presets.
234
+ *
235
+ * @param preset - Preset name
236
+ * @returns Configured SlidingWindow
237
+ *
238
+ * @example
239
+ * ```typescript
240
+ * // 60 requests per minute
241
+ * const perMinute = createWindowPreset('per-minute');
242
+ *
243
+ * // 1000 requests per hour
244
+ * const perHour = createWindowPreset('per-hour');
245
+ * ```
246
+ */
247
+ export declare function createWindowPreset(preset: 'per-second' | 'per-minute' | 'per-hour' | 'per-day'): SlidingWindow;
248
+ /**
249
+ * Create multiple bucket keys for different scopes from the same identifiers.
250
+ *
251
+ * @param identifiers - Identifiers to use
252
+ * @param prefix - Optional prefix for all keys
253
+ * @returns Object with keys for each scope
254
+ *
255
+ * @example
256
+ * ```typescript
257
+ * const keys = createBucketKeys({ agentId: 'a1', userId: 'u1' }, 'rate');
258
+ * // {
259
+ * // global: 'rate:global',
260
+ * // agent: 'rate:agent:a1',
261
+ * // user: 'rate:user:u1',
262
+ * // session: 'rate:session:unknown',
263
+ * // action_type: 'rate:action:unknown'
264
+ * // }
265
+ * ```
266
+ */
267
+ export declare function createBucketKeys(identifiers: BucketIdentifiers, prefix?: string): Record<BucketScope, string>;
268
+ //# sourceMappingURL=rate-limiting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiting.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limiting.ts"],"names":[],"mappings":"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"}