couchloop-eq-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +358 -0
  3. package/assets/logo/README.md +12 -0
  4. package/assets/logo/couchloop_EQ-IconLogo.png +0 -0
  5. package/dist/auth/middleware.d.ts +8 -0
  6. package/dist/auth/middleware.d.ts.map +1 -0
  7. package/dist/auth/middleware.js +59 -0
  8. package/dist/auth/middleware.js.map +1 -0
  9. package/dist/clients/shrinkChatClient.d.ts +195 -0
  10. package/dist/clients/shrinkChatClient.d.ts.map +1 -0
  11. package/dist/clients/shrinkChatClient.js +349 -0
  12. package/dist/clients/shrinkChatClient.js.map +1 -0
  13. package/dist/db/client.d.ts +23 -0
  14. package/dist/db/client.d.ts.map +1 -0
  15. package/dist/db/client.js +78 -0
  16. package/dist/db/client.js.map +1 -0
  17. package/dist/db/migrate.d.ts +4 -0
  18. package/dist/db/migrate.d.ts.map +1 -0
  19. package/dist/db/migrate.js +34 -0
  20. package/dist/db/migrate.js.map +1 -0
  21. package/dist/db/migrations/schema.d.ts +1074 -0
  22. package/dist/db/migrations/schema.d.ts.map +1 -0
  23. package/dist/db/migrations/schema.js +160 -0
  24. package/dist/db/migrations/schema.js.map +1 -0
  25. package/dist/db/schema.d.ts +1213 -0
  26. package/dist/db/schema.d.ts.map +1 -0
  27. package/dist/db/schema.js +157 -0
  28. package/dist/db/schema.js.map +1 -0
  29. package/dist/db/seed.d.ts +4 -0
  30. package/dist/db/seed.d.ts.map +1 -0
  31. package/dist/db/seed.js +57 -0
  32. package/dist/db/seed.js.map +1 -0
  33. package/dist/db/seedOAuth.d.ts +4 -0
  34. package/dist/db/seedOAuth.d.ts.map +1 -0
  35. package/dist/db/seedOAuth.js +76 -0
  36. package/dist/db/seedOAuth.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +93 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/resources/index.d.ts +11 -0
  42. package/dist/resources/index.d.ts.map +1 -0
  43. package/dist/resources/index.js +56 -0
  44. package/dist/resources/index.js.map +1 -0
  45. package/dist/resources/journey-status.d.ts +2 -0
  46. package/dist/resources/journey-status.d.ts.map +1 -0
  47. package/dist/resources/journey-status.js +42 -0
  48. package/dist/resources/journey-status.js.map +1 -0
  49. package/dist/resources/session-summary.d.ts +2 -0
  50. package/dist/resources/session-summary.d.ts.map +1 -0
  51. package/dist/resources/session-summary.js +85 -0
  52. package/dist/resources/session-summary.js.map +1 -0
  53. package/dist/resources/user-context.d.ts +2 -0
  54. package/dist/resources/user-context.d.ts.map +1 -0
  55. package/dist/resources/user-context.js +79 -0
  56. package/dist/resources/user-context.js.map +1 -0
  57. package/dist/server/index.d.ts +3 -0
  58. package/dist/server/index.d.ts.map +1 -0
  59. package/dist/server/index.js +385 -0
  60. package/dist/server/index.js.map +1 -0
  61. package/dist/server/middleware/auth.d.ts +30 -0
  62. package/dist/server/middleware/auth.d.ts.map +1 -0
  63. package/dist/server/middleware/auth.js +157 -0
  64. package/dist/server/middleware/auth.js.map +1 -0
  65. package/dist/server/oauth/anomalyDetection.d.ts +146 -0
  66. package/dist/server/oauth/anomalyDetection.d.ts.map +1 -0
  67. package/dist/server/oauth/anomalyDetection.js +405 -0
  68. package/dist/server/oauth/anomalyDetection.js.map +1 -0
  69. package/dist/server/oauth/authServer.d.ts +61 -0
  70. package/dist/server/oauth/authServer.d.ts.map +1 -0
  71. package/dist/server/oauth/authServer.js +283 -0
  72. package/dist/server/oauth/authServer.js.map +1 -0
  73. package/dist/server/oauth/dpop.d.ts +135 -0
  74. package/dist/server/oauth/dpop.d.ts.map +1 -0
  75. package/dist/server/oauth/dpop.js +338 -0
  76. package/dist/server/oauth/dpop.js.map +1 -0
  77. package/dist/server/oauth/gdpr/consent.d.ts +173 -0
  78. package/dist/server/oauth/gdpr/consent.d.ts.map +1 -0
  79. package/dist/server/oauth/gdpr/consent.js +388 -0
  80. package/dist/server/oauth/gdpr/consent.js.map +1 -0
  81. package/dist/server/oauth/gdpr/dataPortability.d.ts +214 -0
  82. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +1 -0
  83. package/dist/server/oauth/gdpr/dataPortability.js +486 -0
  84. package/dist/server/oauth/gdpr/dataPortability.js.map +1 -0
  85. package/dist/server/oauth/gdpr/index.d.ts +103 -0
  86. package/dist/server/oauth/gdpr/index.d.ts.map +1 -0
  87. package/dist/server/oauth/gdpr/index.js +273 -0
  88. package/dist/server/oauth/gdpr/index.js.map +1 -0
  89. package/dist/server/oauth/gdpr/rightToErasure.d.ts +184 -0
  90. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +1 -0
  91. package/dist/server/oauth/gdpr/rightToErasure.js +527 -0
  92. package/dist/server/oauth/gdpr/rightToErasure.js.map +1 -0
  93. package/dist/server/oauth/monitoring/securityMonitor.d.ts +218 -0
  94. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +1 -0
  95. package/dist/server/oauth/monitoring/securityMonitor.js +615 -0
  96. package/dist/server/oauth/monitoring/securityMonitor.js.map +1 -0
  97. package/dist/server/oauth/pkce.d.ts +61 -0
  98. package/dist/server/oauth/pkce.d.ts.map +1 -0
  99. package/dist/server/oauth/pkce.js +157 -0
  100. package/dist/server/oauth/pkce.js.map +1 -0
  101. package/dist/server/oauth/providers/base.d.ts +147 -0
  102. package/dist/server/oauth/providers/base.d.ts.map +1 -0
  103. package/dist/server/oauth/providers/base.js +312 -0
  104. package/dist/server/oauth/providers/base.js.map +1 -0
  105. package/dist/server/oauth/providers/github.d.ts +55 -0
  106. package/dist/server/oauth/providers/github.d.ts.map +1 -0
  107. package/dist/server/oauth/providers/github.js +225 -0
  108. package/dist/server/oauth/providers/github.js.map +1 -0
  109. package/dist/server/oauth/providers/google.d.ts +49 -0
  110. package/dist/server/oauth/providers/google.d.ts.map +1 -0
  111. package/dist/server/oauth/providers/google.js +153 -0
  112. package/dist/server/oauth/providers/google.js.map +1 -0
  113. package/dist/server/oauth/providers/index.d.ts +9 -0
  114. package/dist/server/oauth/providers/index.d.ts.map +1 -0
  115. package/dist/server/oauth/providers/index.js +24 -0
  116. package/dist/server/oauth/providers/index.js.map +1 -0
  117. package/dist/server/oauth/refreshTokenRotation.d.ts +114 -0
  118. package/dist/server/oauth/refreshTokenRotation.d.ts.map +1 -0
  119. package/dist/server/oauth/refreshTokenRotation.js +344 -0
  120. package/dist/server/oauth/refreshTokenRotation.js.map +1 -0
  121. package/dist/server/oauth/security.d.ts +101 -0
  122. package/dist/server/oauth/security.d.ts.map +1 -0
  123. package/dist/server/oauth/security.js +268 -0
  124. package/dist/server/oauth/security.js.map +1 -0
  125. package/dist/server/oauth/tokenEncryption.d.ts +80 -0
  126. package/dist/server/oauth/tokenEncryption.d.ts.map +1 -0
  127. package/dist/server/oauth/tokenEncryption.js +218 -0
  128. package/dist/server/oauth/tokenEncryption.js.map +1 -0
  129. package/dist/tools/checkpoint.d.ts +35 -0
  130. package/dist/tools/checkpoint.d.ts.map +1 -0
  131. package/dist/tools/checkpoint.js +125 -0
  132. package/dist/tools/checkpoint.js.map +1 -0
  133. package/dist/tools/index.d.ts +412 -0
  134. package/dist/tools/index.d.ts.map +1 -0
  135. package/dist/tools/index.js +262 -0
  136. package/dist/tools/index.js.map +1 -0
  137. package/dist/tools/insight.d.ts +65 -0
  138. package/dist/tools/insight.d.ts.map +1 -0
  139. package/dist/tools/insight.js +190 -0
  140. package/dist/tools/insight.js.map +1 -0
  141. package/dist/tools/journey.d.ts +45 -0
  142. package/dist/tools/journey.d.ts.map +1 -0
  143. package/dist/tools/journey.js +115 -0
  144. package/dist/tools/journey.js.map +1 -0
  145. package/dist/tools/sendMessage.d.ts +6 -0
  146. package/dist/tools/sendMessage.d.ts.map +1 -0
  147. package/dist/tools/sendMessage.js +278 -0
  148. package/dist/tools/sendMessage.js.map +1 -0
  149. package/dist/tools/session.d.ts +106 -0
  150. package/dist/tools/session.d.ts.map +1 -0
  151. package/dist/tools/session.js +161 -0
  152. package/dist/tools/session.js.map +1 -0
  153. package/dist/types/auth.d.ts +37 -0
  154. package/dist/types/auth.d.ts.map +1 -0
  155. package/dist/types/auth.js +44 -0
  156. package/dist/types/auth.js.map +1 -0
  157. package/dist/types/checkpoint.d.ts +25 -0
  158. package/dist/types/checkpoint.d.ts.map +1 -0
  159. package/dist/types/checkpoint.js +8 -0
  160. package/dist/types/checkpoint.js.map +1 -0
  161. package/dist/types/insight.d.ts +83 -0
  162. package/dist/types/insight.d.ts.map +1 -0
  163. package/dist/types/insight.js +14 -0
  164. package/dist/types/insight.js.map +1 -0
  165. package/dist/types/journey.d.ts +155 -0
  166. package/dist/types/journey.d.ts.map +1 -0
  167. package/dist/types/journey.js +29 -0
  168. package/dist/types/journey.js.map +1 -0
  169. package/dist/types/session.d.ts +82 -0
  170. package/dist/types/session.d.ts.map +1 -0
  171. package/dist/types/session.js +13 -0
  172. package/dist/types/session.js.map +1 -0
  173. package/dist/utils/circuitBreaker.d.ts +86 -0
  174. package/dist/utils/circuitBreaker.d.ts.map +1 -0
  175. package/dist/utils/circuitBreaker.js +234 -0
  176. package/dist/utils/circuitBreaker.js.map +1 -0
  177. package/dist/utils/errorHandler.d.ts +101 -0
  178. package/dist/utils/errorHandler.d.ts.map +1 -0
  179. package/dist/utils/errorHandler.js +348 -0
  180. package/dist/utils/errorHandler.js.map +1 -0
  181. package/dist/utils/errors.d.ts +36 -0
  182. package/dist/utils/errors.d.ts.map +1 -0
  183. package/dist/utils/errors.js +77 -0
  184. package/dist/utils/errors.js.map +1 -0
  185. package/dist/utils/logger.d.ts +13 -0
  186. package/dist/utils/logger.d.ts.map +1 -0
  187. package/dist/utils/logger.js +49 -0
  188. package/dist/utils/logger.js.map +1 -0
  189. package/dist/utils/performanceMonitor.d.ts +106 -0
  190. package/dist/utils/performanceMonitor.d.ts.map +1 -0
  191. package/dist/utils/performanceMonitor.js +312 -0
  192. package/dist/utils/performanceMonitor.js.map +1 -0
  193. package/dist/utils/responseCache.d.ts +88 -0
  194. package/dist/utils/responseCache.d.ts.map +1 -0
  195. package/dist/utils/responseCache.js +245 -0
  196. package/dist/utils/responseCache.js.map +1 -0
  197. package/dist/utils/retryStrategy.d.ts +49 -0
  198. package/dist/utils/retryStrategy.d.ts.map +1 -0
  199. package/dist/utils/retryStrategy.js +167 -0
  200. package/dist/utils/retryStrategy.js.map +1 -0
  201. package/dist/workflows/definitions/daily-reflection.d.ts +3 -0
  202. package/dist/workflows/definitions/daily-reflection.d.ts.map +1 -0
  203. package/dist/workflows/definitions/daily-reflection.js +52 -0
  204. package/dist/workflows/definitions/daily-reflection.js.map +1 -0
  205. package/dist/workflows/definitions/gratitude-practice.d.ts +3 -0
  206. package/dist/workflows/definitions/gratitude-practice.d.ts.map +1 -0
  207. package/dist/workflows/definitions/gratitude-practice.js +52 -0
  208. package/dist/workflows/definitions/gratitude-practice.js.map +1 -0
  209. package/dist/workflows/definitions/weekly-review.d.ts +3 -0
  210. package/dist/workflows/definitions/weekly-review.d.ts.map +1 -0
  211. package/dist/workflows/definitions/weekly-review.js +74 -0
  212. package/dist/workflows/definitions/weekly-review.js.map +1 -0
  213. package/dist/workflows/engine.d.ts +21 -0
  214. package/dist/workflows/engine.d.ts.map +1 -0
  215. package/dist/workflows/engine.js +149 -0
  216. package/dist/workflows/engine.js.map +1 -0
  217. package/dist/workflows/index.d.ts +26 -0
  218. package/dist/workflows/index.d.ts.map +1 -0
  219. package/dist/workflows/index.js +14 -0
  220. package/dist/workflows/index.js.map +1 -0
  221. package/package.json +98 -0
  222. package/run-mcp-server.sh +16 -0
@@ -0,0 +1,234 @@
1
+ import { logger } from './logger.js';
2
+ export var CircuitState;
3
+ (function (CircuitState) {
4
+ CircuitState["CLOSED"] = "closed";
5
+ CircuitState["OPEN"] = "open";
6
+ CircuitState["HALF_OPEN"] = "half-open";
7
+ })(CircuitState || (CircuitState = {}));
8
+ export class CircuitBreaker {
9
+ failures = 0;
10
+ lastFailTime;
11
+ state = CircuitState.CLOSED;
12
+ successCount = 0;
13
+ halfOpenAttempts = 0;
14
+ // Statistics tracking
15
+ totalCalls = 0;
16
+ successfulCalls = 0;
17
+ failedCalls = 0;
18
+ rejectedCalls = 0;
19
+ consecutiveFailures = 0;
20
+ consecutiveSuccesses = 0;
21
+ // Configuration
22
+ failureThreshold;
23
+ resetTimeout;
24
+ halfOpenMaxAttempts;
25
+ callbacks;
26
+ constructor(options = {}) {
27
+ this.failureThreshold = options.failureThreshold || 5;
28
+ this.resetTimeout = options.resetTimeout || 30000;
29
+ this.halfOpenMaxAttempts = options.halfOpenMaxAttempts || 3;
30
+ this.callbacks = {
31
+ onOpen: options.onOpen,
32
+ onClose: options.onClose
33
+ };
34
+ logger.info(`Circuit breaker initialized: threshold=${this.failureThreshold}, resetTimeout=${this.resetTimeout}ms`);
35
+ }
36
+ async execute(_operation, fn) {
37
+ this.totalCalls++;
38
+ // Check state and transition if needed
39
+ this.checkStateTransition();
40
+ // Reject if circuit is open
41
+ if (this.state === CircuitState.OPEN) {
42
+ this.rejectedCalls++;
43
+ const timeSinceLastFailure = Date.now() - (this.lastFailTime?.getTime() || 0);
44
+ const remainingTime = Math.ceil((this.resetTimeout - timeSinceLastFailure) / 1000);
45
+ throw new Error(`Circuit breaker is open. Retry in ${remainingTime} seconds`);
46
+ }
47
+ // Check half-open attempts limit
48
+ if (this.state === CircuitState.HALF_OPEN) {
49
+ // Increment for this attempt first
50
+ this.halfOpenAttempts++;
51
+ // Check if we've exceeded the max attempts
52
+ if (this.halfOpenAttempts > this.halfOpenMaxAttempts) {
53
+ this.rejectedCalls++;
54
+ throw new Error('Half-open state: max attempts reached');
55
+ }
56
+ }
57
+ try {
58
+ const result = await fn();
59
+ // Handle successful execution
60
+ this.successfulCalls++;
61
+ this.consecutiveSuccesses++;
62
+ this.consecutiveFailures = 0;
63
+ if (this.state === CircuitState.HALF_OPEN) {
64
+ this.successCount++;
65
+ logger.debug(`Circuit breaker half-open: success ${this.successCount}`);
66
+ // Only close if we've had a successful attempt
67
+ // The getState() method will handle the actual state transition
68
+ // by checking conditions, allowing tests to verify state properly
69
+ if (this.successCount >= 1) {
70
+ this.state = CircuitState.CLOSED;
71
+ this.failures = 0;
72
+ this.successCount = 0;
73
+ this.halfOpenAttempts = 0;
74
+ logger.info('Circuit breaker closed after successful half-open test');
75
+ this.callbacks?.onClose?.();
76
+ }
77
+ }
78
+ else if (this.state === CircuitState.CLOSED && this.failures > 0) {
79
+ // Reset failure count on success when closed
80
+ this.failures = 0;
81
+ }
82
+ return result;
83
+ }
84
+ catch (error) {
85
+ this.handleFailure(error);
86
+ throw error;
87
+ }
88
+ }
89
+ handleFailure(error) {
90
+ this.failures++;
91
+ this.failedCalls++;
92
+ this.consecutiveFailures++;
93
+ this.consecutiveSuccesses = 0;
94
+ this.lastFailTime = new Date();
95
+ logger.warn(`Circuit breaker failure ${this.failures}/${this.failureThreshold}: ${error}`);
96
+ if (this.state === CircuitState.HALF_OPEN) {
97
+ // Immediately open on failure in half-open state
98
+ this.open();
99
+ }
100
+ else if (this.failures >= this.failureThreshold) {
101
+ this.open();
102
+ }
103
+ }
104
+ open() {
105
+ if (this.state !== CircuitState.OPEN) {
106
+ this.state = CircuitState.OPEN;
107
+ logger.error(`Circuit breaker opened after ${this.failures} failures`);
108
+ this.callbacks?.onOpen?.();
109
+ }
110
+ }
111
+ close() {
112
+ this.state = CircuitState.CLOSED;
113
+ this.failures = 0;
114
+ this.successCount = 0;
115
+ this.halfOpenAttempts = 0;
116
+ logger.info('Circuit breaker closed');
117
+ this.callbacks?.onClose?.();
118
+ }
119
+ /**
120
+ * Check and perform state transitions
121
+ */
122
+ checkStateTransition() {
123
+ if (this.state === CircuitState.OPEN) {
124
+ const timeSinceLastFailure = Date.now() - (this.lastFailTime?.getTime() || 0);
125
+ if (timeSinceLastFailure > this.resetTimeout) {
126
+ logger.info('Circuit breaker transitioning to half-open state');
127
+ this.state = CircuitState.HALF_OPEN;
128
+ this.successCount = 0;
129
+ this.halfOpenAttempts = 0;
130
+ }
131
+ }
132
+ }
133
+ /**
134
+ * Get current state
135
+ */
136
+ getState() {
137
+ // Check for state transition before returning
138
+ this.checkStateTransition();
139
+ return this.state;
140
+ }
141
+ /**
142
+ * Get statistics
143
+ */
144
+ getStatistics() {
145
+ const successRate = this.totalCalls > 0
146
+ ? (this.successfulCalls / this.totalCalls) * 100
147
+ : 0;
148
+ return {
149
+ state: this.state,
150
+ totalCalls: this.totalCalls,
151
+ successfulCalls: this.successfulCalls,
152
+ failedCalls: this.failedCalls,
153
+ rejectedCalls: this.rejectedCalls,
154
+ successRate: Math.round(successRate * 100) / 100, // Round to 2 decimal places
155
+ lastFailTime: this.lastFailTime,
156
+ consecutiveFailures: this.consecutiveFailures,
157
+ consecutiveSuccesses: this.consecutiveSuccesses,
158
+ };
159
+ }
160
+ /**
161
+ * Force circuit to open state
162
+ */
163
+ forceOpen() {
164
+ this.state = CircuitState.OPEN;
165
+ this.lastFailTime = new Date();
166
+ logger.info('Circuit breaker forced open');
167
+ this.callbacks?.onOpen?.();
168
+ }
169
+ /**
170
+ * Force circuit to closed state
171
+ */
172
+ forceClose() {
173
+ this.close();
174
+ logger.info('Circuit breaker forced closed');
175
+ }
176
+ /**
177
+ * Manually reset the circuit breaker
178
+ */
179
+ reset() {
180
+ this.state = CircuitState.CLOSED;
181
+ this.failures = 0;
182
+ this.successCount = 0;
183
+ this.halfOpenAttempts = 0;
184
+ this.totalCalls = 0;
185
+ this.successfulCalls = 0;
186
+ this.failedCalls = 0;
187
+ this.consecutiveFailures = 0;
188
+ this.consecutiveSuccesses = 0;
189
+ this.lastFailTime = undefined;
190
+ logger.info('Circuit breaker manually reset');
191
+ }
192
+ /**
193
+ * Check if the circuit is currently available
194
+ */
195
+ isAvailable() {
196
+ if (this.state === CircuitState.CLOSED || this.state === CircuitState.HALF_OPEN) {
197
+ return true;
198
+ }
199
+ // Check if enough time has passed to try half-open
200
+ const timeSinceLastFailure = Date.now() - (this.lastFailTime?.getTime() || 0);
201
+ return timeSinceLastFailure > this.resetTimeout;
202
+ }
203
+ /**
204
+ * Health check
205
+ */
206
+ async healthCheck(fn) {
207
+ // If circuit is open, don't run the health check function
208
+ if (this.state === CircuitState.OPEN) {
209
+ return false;
210
+ }
211
+ // If a health check function is provided, run it
212
+ if (fn) {
213
+ try {
214
+ return await fn();
215
+ }
216
+ catch {
217
+ return false;
218
+ }
219
+ }
220
+ // Default: healthy if not open
221
+ return true;
222
+ }
223
+ /**
224
+ * Get current circuit breaker status (legacy)
225
+ */
226
+ getStatus() {
227
+ return {
228
+ state: this.state,
229
+ failures: this.failures,
230
+ lastFailTime: this.lastFailTime,
231
+ };
232
+ }
233
+ }
234
+ //# sourceMappingURL=circuitBreaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuitBreaker.js","sourceRoot":"","sources":["../../src/utils/circuitBreaker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ export declare enum ErrorType {
2
+ NETWORK = "NETWORK_ERROR",
3
+ TIMEOUT = "TIMEOUT_ERROR",
4
+ VALIDATION = "VALIDATION_ERROR",
5
+ AUTHENTICATION = "AUTHENTICATION_ERROR",
6
+ RATE_LIMIT = "RATE_LIMIT_ERROR",
7
+ SERVER = "SERVER_ERROR",
8
+ CRISIS = "CRISIS_HANDLING_ERROR",
9
+ DATABASE = "DATABASE_ERROR",
10
+ UNKNOWN = "UNKNOWN_ERROR"
11
+ }
12
+ export declare enum ErrorSeverity {
13
+ LOW = "low",
14
+ MEDIUM = "medium",
15
+ HIGH = "high",
16
+ CRITICAL = "critical"
17
+ }
18
+ export interface ErrorContext {
19
+ type: ErrorType;
20
+ severity: ErrorSeverity;
21
+ message: string;
22
+ originalError?: Error;
23
+ metadata?: Record<string, any>;
24
+ timestamp: Date;
25
+ recoverable: boolean;
26
+ userMessage?: string;
27
+ }
28
+ export declare class ApplicationError extends Error {
29
+ readonly context: ErrorContext;
30
+ constructor(context: Partial<ErrorContext> & {
31
+ message: string;
32
+ });
33
+ toJSON(): {
34
+ name: string;
35
+ message: string;
36
+ context: ErrorContext;
37
+ stack: string | undefined;
38
+ };
39
+ }
40
+ /**
41
+ * Error handler with recovery strategies
42
+ */
43
+ export declare class ErrorHandler {
44
+ private errorCount;
45
+ private lastError;
46
+ /**
47
+ * Classify error based on message and characteristics
48
+ */
49
+ classifyError(error: Error): ErrorType;
50
+ /**
51
+ * Determine error severity
52
+ */
53
+ determineSeverity(type: ErrorType, _error: Error): ErrorSeverity;
54
+ /**
55
+ * Handle error with appropriate recovery strategy
56
+ */
57
+ handle(error: Error, context?: Record<string, any>): Promise<ErrorContext>;
58
+ /**
59
+ * Track error frequency for monitoring
60
+ */
61
+ private trackError;
62
+ /**
63
+ * Determine if error is recoverable
64
+ */
65
+ private isRecoverable;
66
+ /**
67
+ * Get user-friendly error message
68
+ */
69
+ private getUserMessage;
70
+ /**
71
+ * Log error based on severity
72
+ */
73
+ private logError;
74
+ /**
75
+ * Apply recovery strategy based on error type
76
+ */
77
+ private applyRecoveryStrategy;
78
+ /**
79
+ * Calculate backoff time based on error frequency
80
+ */
81
+ private calculateBackoff;
82
+ /**
83
+ * Simple delay helper
84
+ */
85
+ private delay;
86
+ /**
87
+ * Get emergency resources for crisis situations
88
+ */
89
+ private getEmergencyResources;
90
+ /**
91
+ * Get error statistics
92
+ */
93
+ getStats(): Record<string, any>;
94
+ /**
95
+ * Reset error tracking
96
+ */
97
+ reset(): void;
98
+ }
99
+ export declare const errorHandler: ErrorHandler;
100
+ export declare function handleError(error: Error, context?: Record<string, any>): Promise<ErrorContext>;
101
+ //# sourceMappingURL=errorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/utils/errorHandler.ts"],"names":[],"mappings":"AAEA,oBAAY,SAAS;IACnB,OAAO,kBAAkB;IACzB,OAAO,kBAAkB;IACzB,UAAU,qBAAqB;IAC/B,cAAc,yBAAyB;IACvC,UAAU,qBAAqB;IAC/B,MAAM,iBAAiB;IACvB,MAAM,0BAA0B;IAChC,QAAQ,mBAAmB;IAC3B,OAAO,kBAAkB;CAC1B;AAED,oBAAY,aAAa;IACvB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAgB,OAAO,EAAE,YAAY,CAAC;gBAE1B,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAgBhE,MAAM;;;;;;CAQP;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,SAAS,CAA8B;IAE/C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS;IA8DtC;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAG,aAAa;IA2BhE;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BhF;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACH,OAAO,CAAC,QAAQ;IA0BhB;;OAEG;YACW,qBAAqB;IAqDnC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,QAAQ;IAcR;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC;AAG/C,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,OAAO,CAAC,YAAY,CAAC,CAEvB"}