@serve.zone/dcrouter 11.0.9 → 11.0.10

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.
@@ -39328,4 +39328,4 @@ ibantools/jsnext/ibantools.js:
39328
39328
  * @preferred
39329
39329
  *)
39330
39330
  */
39331
- //# sourceMappingURL=bundle-1772706780583.js.map
39331
+ //# sourceMappingURL=bundle-1772710528920.js.map
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.0.9',
6
+ version: '11.0.10',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.0.9',
6
+ version: '11.0.10',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@serve.zone/dcrouter",
3
3
  "private": false,
4
- "version": "11.0.9",
4
+ "version": "11.0.10",
5
5
  "description": "A multifaceted routing service handling mail and SMS delivery functions.",
6
6
  "type": "module",
7
7
  "exports": {
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.0.9',
6
+ version: '11.0.10',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '11.0.9',
6
+ version: '11.0.10',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
@@ -1,98 +0,0 @@
1
- import { PlatformError } from './base.errors.js';
2
- import type { IErrorContext } from './base.errors.js';
3
- /**
4
- * Error handler configuration
5
- */
6
- export interface IErrorHandlerConfig {
7
- /** Whether to log errors automatically */
8
- logErrors: boolean;
9
- /** Whether to include stack traces in prod environment */
10
- includeStacksInProd: boolean;
11
- /** Default retry options */
12
- retry: {
13
- /** Maximum retry attempts */
14
- maxAttempts: number;
15
- /** Base delay between retries in ms */
16
- baseDelay: number;
17
- /** Maximum delay between retries in ms */
18
- maxDelay: number;
19
- /** Backoff factor for exponential backoff */
20
- backoffFactor: number;
21
- };
22
- }
23
- /**
24
- * Error handler utility
25
- * Provides methods for consistent error handling across the platform
26
- */
27
- export declare class ErrorHandler {
28
- /**
29
- * Current configuration
30
- */
31
- static config: IErrorHandlerConfig;
32
- /**
33
- * Update error handler configuration
34
- *
35
- * @param newConfig New configuration (partial)
36
- */
37
- static configure(newConfig: Partial<IErrorHandlerConfig>): void;
38
- /**
39
- * Convert any error to a PlatformError
40
- *
41
- * @param error Error to convert
42
- * @param defaultCode Default error code if not a PlatformError
43
- * @param context Additional context
44
- * @returns PlatformError instance
45
- */
46
- static toPlatformError(error: any, defaultCode: string, context?: IErrorContext): PlatformError;
47
- /**
48
- * Format an error for API responses
49
- * Sanitizes errors for safe external exposure
50
- *
51
- * @param error Error to format
52
- * @param includeDetails Whether to include detailed information
53
- * @returns Formatted error object
54
- */
55
- static formatErrorForResponse(error: any, includeDetails?: boolean): Record<string, any>;
56
- /**
57
- * Handle an error with consistent logging and formatting
58
- *
59
- * @param error Error to handle
60
- * @param defaultCode Default error code if not a PlatformError
61
- * @param context Additional context
62
- * @returns Formatted error for response
63
- */
64
- static handleError(error: any, defaultCode: string, context?: IErrorContext): Record<string, any>;
65
- /**
66
- * Execute a function with error handling
67
- *
68
- * @param fn Function to execute
69
- * @param defaultCode Default error code if the function throws
70
- * @param context Additional context
71
- * @returns Function result or error
72
- */
73
- static execute<T>(fn: () => Promise<T>, defaultCode: string, context?: IErrorContext): Promise<T>;
74
- /**
75
- * Execute a function with retries and exponential backoff
76
- *
77
- * @param fn Function to execute
78
- * @param defaultCode Default error code if the function throws
79
- * @param options Retry options
80
- * @param context Additional context
81
- * @returns Function result or error after max retries
82
- */
83
- static executeWithRetry<T>(fn: () => Promise<T>, defaultCode: string, options?: {
84
- maxAttempts?: number;
85
- baseDelay?: number;
86
- maxDelay?: number;
87
- backoffFactor?: number;
88
- retryableErrorCodes?: string[];
89
- retryableErrorPatterns?: RegExp[];
90
- onRetry?: (error: PlatformError, attempt: number, delay: number) => void;
91
- }, context?: IErrorContext): Promise<T>;
92
- }
93
- /**
94
- * Create a middleware for handling errors in HTTP requests
95
- *
96
- * @returns Middleware function
97
- */
98
- export declare function createErrorHandlerMiddleware(): (error: any, req: any, res: any, next: any) => void;
@@ -1,282 +0,0 @@
1
- import { PlatformError } from './base.errors.js';
2
- import { ErrorCategory, ErrorRecoverability, ErrorSeverity } from './error.codes.js';
3
- import { logger } from '../logger.js';
4
- /**
5
- * Global error handler configuration
6
- */
7
- const config = {
8
- logErrors: true,
9
- includeStacksInProd: false,
10
- retry: {
11
- maxAttempts: 3,
12
- baseDelay: 1000,
13
- maxDelay: 30000,
14
- backoffFactor: 2
15
- }
16
- };
17
- /**
18
- * Error handler utility
19
- * Provides methods for consistent error handling across the platform
20
- */
21
- export class ErrorHandler {
22
- /**
23
- * Current configuration
24
- */
25
- static config = config;
26
- /**
27
- * Update error handler configuration
28
- *
29
- * @param newConfig New configuration (partial)
30
- */
31
- static configure(newConfig) {
32
- ErrorHandler.config = {
33
- ...ErrorHandler.config,
34
- ...newConfig,
35
- retry: {
36
- ...ErrorHandler.config.retry,
37
- ...(newConfig.retry || {})
38
- }
39
- };
40
- }
41
- /**
42
- * Convert any error to a PlatformError
43
- *
44
- * @param error Error to convert
45
- * @param defaultCode Default error code if not a PlatformError
46
- * @param context Additional context
47
- * @returns PlatformError instance
48
- */
49
- static toPlatformError(error, defaultCode, context = {}) {
50
- // If already a PlatformError, just add context
51
- if (error instanceof PlatformError) {
52
- // Add context if provided
53
- if (Object.keys(context).length > 0) {
54
- return new error.constructor(error.message, error.code, error.severity, error.category, error.recoverability, {
55
- ...error.context,
56
- ...context,
57
- data: {
58
- ...(error.context.data || {}),
59
- ...(context.data || {})
60
- }
61
- });
62
- }
63
- return error;
64
- }
65
- // Convert standard Error to PlatformError
66
- if (error instanceof Error) {
67
- return new PlatformError(error.message, defaultCode, ErrorSeverity.MEDIUM, ErrorCategory.OPERATION, ErrorRecoverability.NON_RECOVERABLE, {
68
- ...context,
69
- data: {
70
- ...(context.data || {}),
71
- originalError: {
72
- name: error.name,
73
- message: error.message,
74
- stack: error.stack
75
- }
76
- }
77
- });
78
- }
79
- // Not an Error instance
80
- return new PlatformError(typeof error === 'string' ? error : 'Unknown error', defaultCode, ErrorSeverity.MEDIUM, ErrorCategory.OPERATION, ErrorRecoverability.NON_RECOVERABLE, context);
81
- }
82
- /**
83
- * Format an error for API responses
84
- * Sanitizes errors for safe external exposure
85
- *
86
- * @param error Error to format
87
- * @param includeDetails Whether to include detailed information
88
- * @returns Formatted error object
89
- */
90
- static formatErrorForResponse(error, includeDetails = false) {
91
- const platformError = ErrorHandler.toPlatformError(error, 'PLATFORM_OPERATION_ERROR');
92
- // Basic error information
93
- const responseError = {
94
- code: platformError.code,
95
- message: platformError.getUserMessage(),
96
- requestId: platformError.context.requestId
97
- };
98
- // Include more details if requested
99
- if (includeDetails) {
100
- responseError.details = {
101
- severity: platformError.severity,
102
- category: platformError.category,
103
- rawMessage: platformError.message,
104
- data: platformError.context.data
105
- };
106
- // Only include stack trace in non-production or if explicitly enabled
107
- if (process.env.NODE_ENV !== 'production' || ErrorHandler.config.includeStacksInProd) {
108
- responseError.details.stack = platformError.stack;
109
- }
110
- }
111
- return responseError;
112
- }
113
- /**
114
- * Handle an error with consistent logging and formatting
115
- *
116
- * @param error Error to handle
117
- * @param defaultCode Default error code if not a PlatformError
118
- * @param context Additional context
119
- * @returns Formatted error for response
120
- */
121
- static handleError(error, defaultCode, context = {}) {
122
- const platformError = ErrorHandler.toPlatformError(error, defaultCode, context);
123
- // Log the error if enabled
124
- if (ErrorHandler.config.logErrors) {
125
- logger.error(platformError.message, {
126
- error_code: platformError.code,
127
- error_name: platformError.name,
128
- error_severity: platformError.severity,
129
- error_category: platformError.category,
130
- error_recoverability: platformError.recoverability,
131
- ...platformError.context,
132
- stack: platformError.stack
133
- });
134
- }
135
- // Return formatted error for response
136
- const isDetailedMode = process.env.NODE_ENV !== 'production';
137
- return ErrorHandler.formatErrorForResponse(platformError, isDetailedMode);
138
- }
139
- /**
140
- * Execute a function with error handling
141
- *
142
- * @param fn Function to execute
143
- * @param defaultCode Default error code if the function throws
144
- * @param context Additional context
145
- * @returns Function result or error
146
- */
147
- static async execute(fn, defaultCode, context = {}) {
148
- try {
149
- return await fn();
150
- }
151
- catch (error) {
152
- throw ErrorHandler.toPlatformError(error, defaultCode, context);
153
- }
154
- }
155
- /**
156
- * Execute a function with retries and exponential backoff
157
- *
158
- * @param fn Function to execute
159
- * @param defaultCode Default error code if the function throws
160
- * @param options Retry options
161
- * @param context Additional context
162
- * @returns Function result or error after max retries
163
- */
164
- static async executeWithRetry(fn, defaultCode, options = {}, context = {}) {
165
- const { maxAttempts = ErrorHandler.config.retry.maxAttempts, baseDelay = ErrorHandler.config.retry.baseDelay, maxDelay = ErrorHandler.config.retry.maxDelay, backoffFactor = ErrorHandler.config.retry.backoffFactor, retryableErrorCodes = [], retryableErrorPatterns = [], onRetry = () => { } } = options;
166
- let lastError;
167
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
168
- try {
169
- return await fn();
170
- }
171
- catch (error) {
172
- // Convert to PlatformError
173
- const platformError = ErrorHandler.toPlatformError(error, defaultCode, {
174
- ...context,
175
- retry: {
176
- currentRetry: attempt,
177
- maxRetries: maxAttempts,
178
- nextRetryAt: 0 // Will be set below if retrying
179
- }
180
- });
181
- lastError = platformError;
182
- // Check if we should retry
183
- const isLastAttempt = attempt >= maxAttempts - 1;
184
- if (isLastAttempt) {
185
- // No more retries
186
- throw platformError;
187
- }
188
- // Check if error is retryable
189
- const isRetryable =
190
- // Built-in recoverability
191
- platformError.recoverability === ErrorRecoverability.RECOVERABLE ||
192
- platformError.recoverability === ErrorRecoverability.MAYBE_RECOVERABLE ||
193
- platformError.recoverability === ErrorRecoverability.TRANSIENT ||
194
- // Specifically included error codes
195
- retryableErrorCodes.includes(platformError.code) ||
196
- // Matches error message patterns
197
- retryableErrorPatterns.some(pattern => pattern.test(platformError.message));
198
- if (!isRetryable) {
199
- throw platformError;
200
- }
201
- // Calculate delay with exponential backoff
202
- const delay = Math.min(baseDelay * Math.pow(backoffFactor, attempt), maxDelay);
203
- // Add jitter to prevent thundering herd problem (±20%)
204
- const jitter = 0.8 + Math.random() * 0.4;
205
- const actualDelay = Math.floor(delay * jitter);
206
- // Update nextRetryAt in error context
207
- const nextRetryAt = Date.now() + actualDelay;
208
- platformError.context.retry.nextRetryAt = nextRetryAt;
209
- // Log retry attempt
210
- logger.warn(`Retrying operation after error (attempt ${attempt + 1}/${maxAttempts}): ${platformError.message}`, {
211
- error_code: platformError.code,
212
- retry_attempt: attempt + 1,
213
- retry_max_attempts: maxAttempts,
214
- retry_delay_ms: actualDelay,
215
- retry_next_at: new Date(nextRetryAt).toISOString()
216
- });
217
- // Call onRetry callback
218
- onRetry(platformError, attempt + 1, actualDelay);
219
- // Wait before next retry
220
- await new Promise(resolve => setTimeout(resolve, actualDelay));
221
- }
222
- }
223
- // This should never happen, but TypeScript needs it
224
- throw lastError;
225
- }
226
- }
227
- /**
228
- * Create a middleware for handling errors in HTTP requests
229
- *
230
- * @returns Middleware function
231
- */
232
- export function createErrorHandlerMiddleware() {
233
- return (error, req, res, next) => {
234
- // Add request context
235
- const context = {
236
- requestId: req.headers['x-request-id'] || req.headers['x-correlation-id'],
237
- component: 'HttpServer',
238
- operation: `${req.method} ${req.url}`,
239
- data: {
240
- method: req.method,
241
- url: req.url,
242
- query: req.query,
243
- params: req.params,
244
- ip: req.ip || req.connection.remoteAddress,
245
- userAgent: req.headers['user-agent']
246
- }
247
- };
248
- // Handle the error
249
- const formattedError = ErrorHandler.handleError(error, 'PLATFORM_OPERATION_ERROR', context);
250
- // Set status code based on error type
251
- let statusCode = 500;
252
- if (error instanceof PlatformError) {
253
- // Map error categories to HTTP status codes
254
- switch (error.category) {
255
- case ErrorCategory.VALIDATION:
256
- statusCode = 400;
257
- break;
258
- case ErrorCategory.AUTHENTICATION:
259
- statusCode = 401;
260
- break;
261
- case ErrorCategory.RESOURCE:
262
- statusCode = 429;
263
- break;
264
- case ErrorCategory.OPERATION:
265
- statusCode = 400;
266
- break;
267
- default:
268
- statusCode = 500;
269
- }
270
- }
271
- else if (error.statusCode) {
272
- // Use provided status code if available
273
- statusCode = error.statusCode;
274
- }
275
- // Send error response
276
- res.status(statusCode).json({
277
- success: false,
278
- error: formattedError
279
- });
280
- };
281
- }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2Vycm9ycy9lcnJvci1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUE0QnRDOztHQUVHO0FBQ0gsTUFBTSxNQUFNLEdBQXdCO0lBQ2xDLFNBQVMsRUFBRSxJQUFJO0lBQ2YsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixLQUFLLEVBQUU7UUFDTCxXQUFXLEVBQUUsQ0FBQztRQUNkLFNBQVMsRUFBRSxJQUFJO1FBQ2YsUUFBUSxFQUFFLEtBQUs7UUFDZixhQUFhLEVBQUUsQ0FBQztLQUNqQjtDQUNGLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUN2Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBRTlCOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQXVDO1FBQzdELFlBQVksQ0FBQyxNQUFNLEdBQUc7WUFDcEIsR0FBRyxZQUFZLENBQUMsTUFBTTtZQUN0QixHQUFHLFNBQVM7WUFDWixLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQzVCLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzthQUMzQjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQzNCLEtBQVUsRUFDVixXQUFtQixFQUNuQixVQUF5QixFQUFFO1FBRTNCLCtDQUErQztRQUMvQyxJQUFJLEtBQUssWUFBWSxhQUFhLEVBQUUs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
@@ -1,183 +0,0 @@
1
- import { PlatformError, OperationError, ResourceError } from './base.errors.js';
2
- import type { IErrorContext } from './base.errors.js';
3
- /**
4
- * Base class for reputation-related errors
5
- */
6
- export declare class ReputationError extends OperationError {
7
- /**
8
- * Creates a new reputation error
9
- *
10
- * @param message Error message
11
- * @param code Error code
12
- * @param context Additional context
13
- */
14
- constructor(message: string, code: string, context?: IErrorContext);
15
- }
16
- /**
17
- * Error class for reputation check errors
18
- */
19
- export declare class ReputationCheckError extends ReputationError {
20
- /**
21
- * Creates a new reputation check error
22
- *
23
- * @param message Error message
24
- * @param context Additional context
25
- */
26
- constructor(message: string, context?: IErrorContext);
27
- /**
28
- * Creates a new instance with updated context
29
- */
30
- protected createWithContext(context: IErrorContext): PlatformError;
31
- /**
32
- * Creates an instance for an IP reputation check error
33
- *
34
- * @param ip IP address
35
- * @param provider Reputation provider
36
- * @param originalError Original error
37
- * @param context Additional context
38
- */
39
- static ipCheckFailed(ip: string, provider: string, originalError?: Error, context?: IErrorContext): ReputationCheckError;
40
- /**
41
- * Creates an instance for a domain reputation check error
42
- *
43
- * @param domain Domain
44
- * @param provider Reputation provider
45
- * @param originalError Original error
46
- * @param context Additional context
47
- */
48
- static domainCheckFailed(domain: string, provider: string, originalError?: Error, context?: IErrorContext): ReputationCheckError;
49
- }
50
- /**
51
- * Error class for reputation data errors
52
- */
53
- export declare class ReputationDataError extends ReputationError {
54
- /**
55
- * Creates a new reputation data error
56
- *
57
- * @param message Error message
58
- * @param context Additional context
59
- */
60
- constructor(message: string, context?: IErrorContext);
61
- /**
62
- * Creates a new instance with updated context
63
- */
64
- protected createWithContext(context: IErrorContext): PlatformError;
65
- /**
66
- * Creates an instance for a data access error
67
- *
68
- * @param entity Entity type (domain, ip)
69
- * @param entityId Entity identifier
70
- * @param operation Operation that failed (read, write, update)
71
- * @param originalError Original error
72
- * @param context Additional context
73
- */
74
- static dataAccessFailed(entity: string, entityId: string, operation: string, originalError?: Error, context?: IErrorContext): ReputationDataError;
75
- }
76
- /**
77
- * Error class for blocklist-related errors
78
- */
79
- export declare class BlocklistError extends ReputationError {
80
- /**
81
- * Creates a new blocklist error
82
- *
83
- * @param message Error message
84
- * @param context Additional context
85
- */
86
- constructor(message: string, context?: IErrorContext);
87
- /**
88
- * Creates a new instance with updated context
89
- */
90
- protected createWithContext(context: IErrorContext): PlatformError;
91
- /**
92
- * Creates an instance for an entity found on a blocklist
93
- *
94
- * @param entity Entity type (domain, ip)
95
- * @param entityId Entity identifier
96
- * @param blocklist Blocklist name
97
- * @param reason Reason for listing (if available)
98
- * @param context Additional context
99
- */
100
- static entityBlocked(entity: string, entityId: string, blocklist: string, reason?: string, context?: IErrorContext): BlocklistError;
101
- }
102
- /**
103
- * Error class for reputation update errors
104
- */
105
- export declare class ReputationUpdateError extends ReputationError {
106
- /**
107
- * Creates a new reputation update error
108
- *
109
- * @param message Error message
110
- * @param context Additional context
111
- */
112
- constructor(message: string, context?: IErrorContext);
113
- /**
114
- * Creates a new instance with updated context
115
- */
116
- protected createWithContext(context: IErrorContext): PlatformError;
117
- }
118
- /**
119
- * Error class for IP warmup allocation errors
120
- */
121
- export declare class WarmupAllocationError extends ReputationError {
122
- /**
123
- * Creates a new warmup allocation error
124
- *
125
- * @param message Error message
126
- * @param context Additional context
127
- */
128
- constructor(message: string, context?: IErrorContext);
129
- /**
130
- * Creates a new instance with updated context
131
- */
132
- protected createWithContext(context: IErrorContext): PlatformError;
133
- /**
134
- * Creates an instance for no available IPs
135
- *
136
- * @param domain Domain requesting an IP
137
- * @param policy Allocation policy that was used
138
- * @param context Additional context
139
- */
140
- static noAvailableIps(domain: string, policy: string, context?: IErrorContext): WarmupAllocationError;
141
- }
142
- /**
143
- * Error class for IP warmup limit exceeded errors
144
- */
145
- export declare class WarmupLimitError extends ResourceError {
146
- /**
147
- * Creates a new warmup limit error
148
- *
149
- * @param message Error message
150
- * @param context Additional context
151
- */
152
- constructor(message: string, context?: IErrorContext);
153
- /**
154
- * Creates a new instance with updated context
155
- */
156
- protected createWithContext(context: IErrorContext): PlatformError;
157
- /**
158
- * Creates an instance for daily sending limit exceeded
159
- *
160
- * @param ip IP address
161
- * @param domain Domain
162
- * @param limit Daily limit
163
- * @param sent Number of emails sent
164
- * @param context Additional context
165
- */
166
- static dailyLimitExceeded(ip: string, domain: string, limit: number, sent: number, context?: IErrorContext): WarmupLimitError;
167
- }
168
- /**
169
- * Error class for IP warmup schedule errors
170
- */
171
- export declare class WarmupScheduleError extends ReputationError {
172
- /**
173
- * Creates a new warmup schedule error
174
- *
175
- * @param message Error message
176
- * @param context Additional context
177
- */
178
- constructor(message: string, context?: IErrorContext);
179
- /**
180
- * Creates a new instance with updated context
181
- */
182
- protected createWithContext(context: IErrorContext): PlatformError;
183
- }
@@ -1,292 +0,0 @@
1
- import { PlatformError, OperationError, ResourceError } from './base.errors.js';
2
- import { REPUTATION_CHECK_ERROR, REPUTATION_DATA_ERROR, REPUTATION_BLOCKLIST_ERROR, REPUTATION_UPDATE_ERROR, WARMUP_ALLOCATION_ERROR, WARMUP_LIMIT_EXCEEDED, WARMUP_SCHEDULE_ERROR } from './error.codes.js';
3
- /**
4
- * Base class for reputation-related errors
5
- */
6
- export class ReputationError extends OperationError {
7
- /**
8
- * Creates a new reputation error
9
- *
10
- * @param message Error message
11
- * @param code Error code
12
- * @param context Additional context
13
- */
14
- constructor(message, code, context = {}) {
15
- super(message, code, context);
16
- }
17
- }
18
- /**
19
- * Error class for reputation check errors
20
- */
21
- export class ReputationCheckError extends ReputationError {
22
- /**
23
- * Creates a new reputation check error
24
- *
25
- * @param message Error message
26
- * @param context Additional context
27
- */
28
- constructor(message, context = {}) {
29
- super(message, REPUTATION_CHECK_ERROR, context);
30
- }
31
- /**
32
- * Creates a new instance with updated context
33
- */
34
- createWithContext(context) {
35
- return new this.constructor(this.message, context);
36
- }
37
- /**
38
- * Creates an instance for an IP reputation check error
39
- *
40
- * @param ip IP address
41
- * @param provider Reputation provider
42
- * @param originalError Original error
43
- * @param context Additional context
44
- */
45
- static ipCheckFailed(ip, provider, originalError, context = {}) {
46
- const errorMsg = originalError ? `: ${originalError.message}` : '';
47
- return new ReputationCheckError(`Failed to check reputation for IP ${ip} with provider ${provider}${errorMsg}`, {
48
- ...context,
49
- data: {
50
- ...context.data,
51
- ip,
52
- provider,
53
- originalError: originalError ? {
54
- message: originalError.message,
55
- stack: originalError.stack
56
- } : undefined
57
- }
58
- });
59
- }
60
- /**
61
- * Creates an instance for a domain reputation check error
62
- *
63
- * @param domain Domain
64
- * @param provider Reputation provider
65
- * @param originalError Original error
66
- * @param context Additional context
67
- */
68
- static domainCheckFailed(domain, provider, originalError, context = {}) {
69
- const errorMsg = originalError ? `: ${originalError.message}` : '';
70
- return new ReputationCheckError(`Failed to check reputation for domain ${domain} with provider ${provider}${errorMsg}`, {
71
- ...context,
72
- data: {
73
- ...context.data,
74
- domain,
75
- provider,
76
- originalError: originalError ? {
77
- message: originalError.message,
78
- stack: originalError.stack
79
- } : undefined
80
- }
81
- });
82
- }
83
- }
84
- /**
85
- * Error class for reputation data errors
86
- */
87
- export class ReputationDataError extends ReputationError {
88
- /**
89
- * Creates a new reputation data error
90
- *
91
- * @param message Error message
92
- * @param context Additional context
93
- */
94
- constructor(message, context = {}) {
95
- super(message, REPUTATION_DATA_ERROR, context);
96
- }
97
- /**
98
- * Creates a new instance with updated context
99
- */
100
- createWithContext(context) {
101
- return new this.constructor(this.message, context);
102
- }
103
- /**
104
- * Creates an instance for a data access error
105
- *
106
- * @param entity Entity type (domain, ip)
107
- * @param entityId Entity identifier
108
- * @param operation Operation that failed (read, write, update)
109
- * @param originalError Original error
110
- * @param context Additional context
111
- */
112
- static dataAccessFailed(entity, entityId, operation, originalError, context = {}) {
113
- const errorMsg = originalError ? `: ${originalError.message}` : '';
114
- return new ReputationDataError(`Failed to ${operation} reputation data for ${entity} ${entityId}${errorMsg}`, {
115
- ...context,
116
- data: {
117
- ...context.data,
118
- entity,
119
- entityId,
120
- operation,
121
- originalError: originalError ? {
122
- message: originalError.message,
123
- stack: originalError.stack
124
- } : undefined
125
- }
126
- });
127
- }
128
- }
129
- /**
130
- * Error class for blocklist-related errors
131
- */
132
- export class BlocklistError extends ReputationError {
133
- /**
134
- * Creates a new blocklist error
135
- *
136
- * @param message Error message
137
- * @param context Additional context
138
- */
139
- constructor(message, context = {}) {
140
- super(message, REPUTATION_BLOCKLIST_ERROR, context);
141
- }
142
- /**
143
- * Creates a new instance with updated context
144
- */
145
- createWithContext(context) {
146
- return new this.constructor(this.message, context);
147
- }
148
- /**
149
- * Creates an instance for an entity found on a blocklist
150
- *
151
- * @param entity Entity type (domain, ip)
152
- * @param entityId Entity identifier
153
- * @param blocklist Blocklist name
154
- * @param reason Reason for listing (if available)
155
- * @param context Additional context
156
- */
157
- static entityBlocked(entity, entityId, blocklist, reason, context = {}) {
158
- const reasonText = reason ? ` (${reason})` : '';
159
- return new BlocklistError(`${entity.charAt(0).toUpperCase() + entity.slice(1)} ${entityId} is listed on blocklist ${blocklist}${reasonText}`, {
160
- ...context,
161
- data: {
162
- ...context.data,
163
- entity,
164
- entityId,
165
- blocklist,
166
- reason
167
- },
168
- userMessage: `The ${entity} ${entityId} is on a blocklist. This may affect email deliverability.`
169
- });
170
- }
171
- }
172
- /**
173
- * Error class for reputation update errors
174
- */
175
- export class ReputationUpdateError extends ReputationError {
176
- /**
177
- * Creates a new reputation update error
178
- *
179
- * @param message Error message
180
- * @param context Additional context
181
- */
182
- constructor(message, context = {}) {
183
- super(message, REPUTATION_UPDATE_ERROR, context);
184
- }
185
- /**
186
- * Creates a new instance with updated context
187
- */
188
- createWithContext(context) {
189
- return new this.constructor(this.message, context);
190
- }
191
- }
192
- /**
193
- * Error class for IP warmup allocation errors
194
- */
195
- export class WarmupAllocationError extends ReputationError {
196
- /**
197
- * Creates a new warmup allocation error
198
- *
199
- * @param message Error message
200
- * @param context Additional context
201
- */
202
- constructor(message, context = {}) {
203
- super(message, WARMUP_ALLOCATION_ERROR, context);
204
- }
205
- /**
206
- * Creates a new instance with updated context
207
- */
208
- createWithContext(context) {
209
- return new this.constructor(this.message, context);
210
- }
211
- /**
212
- * Creates an instance for no available IPs
213
- *
214
- * @param domain Domain requesting an IP
215
- * @param policy Allocation policy that was used
216
- * @param context Additional context
217
- */
218
- static noAvailableIps(domain, policy, context = {}) {
219
- return new WarmupAllocationError(`No available IPs for domain ${domain} using ${policy} allocation policy`, {
220
- ...context,
221
- data: {
222
- ...context.data,
223
- domain,
224
- policy
225
- },
226
- userMessage: `No available sending IPs for ${domain}.`
227
- });
228
- }
229
- }
230
- /**
231
- * Error class for IP warmup limit exceeded errors
232
- */
233
- export class WarmupLimitError extends ResourceError {
234
- /**
235
- * Creates a new warmup limit error
236
- *
237
- * @param message Error message
238
- * @param context Additional context
239
- */
240
- constructor(message, context = {}) {
241
- super(message, WARMUP_LIMIT_EXCEEDED, context);
242
- }
243
- /**
244
- * Creates a new instance with updated context
245
- */
246
- createWithContext(context) {
247
- return new this.constructor(this.message, context);
248
- }
249
- /**
250
- * Creates an instance for daily sending limit exceeded
251
- *
252
- * @param ip IP address
253
- * @param domain Domain
254
- * @param limit Daily limit
255
- * @param sent Number of emails sent
256
- * @param context Additional context
257
- */
258
- static dailyLimitExceeded(ip, domain, limit, sent, context = {}) {
259
- return new WarmupLimitError(`Daily sending limit exceeded for IP ${ip} and domain ${domain}: ${sent}/${limit}`, {
260
- ...context,
261
- data: {
262
- ...context.data,
263
- ip,
264
- domain,
265
- limit,
266
- sent
267
- },
268
- userMessage: `Daily sending limit reached for ${domain}.`
269
- });
270
- }
271
- }
272
- /**
273
- * Error class for IP warmup schedule errors
274
- */
275
- export class WarmupScheduleError extends ReputationError {
276
- /**
277
- * Creates a new warmup schedule error
278
- *
279
- * @param message Error message
280
- * @param context Additional context
281
- */
282
- constructor(message, context = {}) {
283
- super(message, WARMUP_SCHEDULE_ERROR, context);
284
- }
285
- /**
286
- * Creates a new instance with updated context
287
- */
288
- createWithContext(context) {
289
- return new this.constructor(this.message, context);
290
- }
291
- }
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwdXRhdGlvbi5lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9lcnJvcnMvcmVwdXRhdGlvbi5lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2QsYUFBYSxFQUNkLE1BQU0sa0JBQWtCLENBQUM7QUFHMUIsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUN0QixNQUFNLGtCQUFrQixDQUFDO0FBRTFCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsY0FBYztJQUNqRDs7Ozs7O09BTUc7SUFDSCxZQUNFLE9BQWUsRUFDZixJQUFZLEVBQ1osVUFBeUIsRUFBRTtRQUUzQixLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxlQUFlO0lBQ3ZEOzs7OztPQUtHO0lBQ0gsWUFDRSxPQUFlLEVBQ2YsVUFBeUIsRUFBRTtRQUUzQixLQUFLLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNPLGlCQUFpQixDQUFDLE9BQXNCO1FBQ2hELE9BQU8sSUFBSyxJQUFJLENBQUMsV0FBMkMsQ0FDMUQsSUFBSSxDQUFDLE9BQU8sRUFDWixPQUFPLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FDekIsRUFBVSxFQUNWLFFBQWdCLEVBQ2hCLGFBQXFCLEVBQ3JCLFVBQXlCLEVBQUU7UUFFM0IsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25FLE9BQU8sSUFBSSxvQkFBb0IsQ0FDN0IscUNBQXFDLEVBQUUsa0JBQWtCLFFBQVEsR0FBRyxRQUFRLEVBQUUsRUFDOUU7WUFDRSxHQUFHLE9BQU87WUFDVixJQUFJLEVBQUU7Z0JBQ0osR0FBRyxPQUFPLENBQUMsSUFBSTtnQkFDZixFQUFFO2dCQUNGLFFBQVE7Z0JBQ1IsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTztvQkFDOUIsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLO2lCQUMzQixDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQ2Q7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDN0IsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLGFBQXFCLEVBQ3JCLFVBQXlCLEVBQUU7UUFFM0IsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25FLE9BQU8sSUFBSSxvQkFBb0IsQ0FDN0IseUNBQXlDLE1BQU0sa0JBQWtCLFFBQVEsR0FBRyxRQUFRLEVBQUUsRUFDdEY7WUFDRSxHQUFHLE9BQU87WUFDVixJQUFJLEVBQUU7Z0JBQ0osR0FBRyxPQUFPLENBQUMsSUFBSTtnQkFDZixNQUFNO2dCQUNOLFFBQVE7Z0JBQ1IsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTztvQkFDOUIsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLO2lCQUMzQixDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQ2Q7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxlQUFlO0lBQ3REOzs7OztPQUtHO0lBQ0gsWUFDRSxPQUFlLEVBQ2YsVUFBeUIsRUFBRTtRQUUzQixLQUFLLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNPLGlCQUFpQixDQUFDLE9BQXNCO1FBQ2hELE9BQU8sSUFBSyxJQUFJLENBQUMsV0FBMEMsQ0FDekQsSUFBSSxDQUFDLE9BQU8sRUFDWixPQUFPLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDNUIsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLGFBQXFCLEVBQ3JCLFVBQXlCLEVBQUU7UUFFM0IsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25FLE9BQU8sSUFBSSxtQkFBbUIsQ0FDNUIsYUFBYSxTQUFTLHdCQUF3QixNQUFNLElBQUksUUFBUSxHQUFHLFFBQVEsRUFBRSxFQUM3RTtZQUNFLEdBQUcsT0FBTztZQUNWLElBQUksRUFBRTtnQkFDSixHQUFHLE9BQU8sQ0FBQyxJQUFJO2dCQUNmLE1BQU07Z0JBQ04sUUFBUTtnQkFDUixTQUFTO2dCQUNULGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO29CQUM3QixPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87b0JBQzlCLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSztpQkFDM0IsQ0FBQyxDQUFDLENBQUMsU0FBUzthQUNkO1NBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBZSxTQUFRLGVBQWU7SUFDakQ7Ozs7O09BS0c7SUFDSCxZQUNFLE9BQWUsRUFDZixVQUF5QixFQUFFO1FBRTNCLEtBQUssQ0FBQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ08saUJBQWlCLENBQUMsT0FBc0I7UUFDaEQsT0FBTyxJQUFLLElBQUksQ0FBQyxXQUFxQyxDQUNwRCxJQUFJLENBQUMsT0FBTyxFQUNaLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FDekIsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLE1BQWUsRUFDZixVQUF5QixFQUFFO1FBRTNCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELE9BQU8sSUFBSSxjQUFjLENBQ3ZCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsMkJBQTJCLFNBQVMsR0FBRyxVQUFVLEVBQUUsRUFDbEg7WUFDRSxHQUFHLE9BQU87WUFDVixJQUFJLEVBQUU7Z0JBQ0osR0FBRyxPQUFPLENBQUMsSUFBSTtnQkFDZixNQUFNO2dCQUNOLFFBQVE7Z0JBQ1IsU0FBUztnQkFDVCxNQUFNO2FBQ1A7WUFDRCxXQUFXLEVBQUUsT0FBTyxNQUFNLElBQUksUUFBUSwyREFBMkQ7U0FDbEcsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQUN4RDs7Ozs7T0FLRztJQUNILFlBQ0UsT0FBZSxFQUNmLFVBQXlCLEVBQUU7UUFFM0IsS0FBSyxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUIsQ0FBQyxPQUFzQjtRQUNoRCxPQUFPLElBQUssSUFBSSxDQUFDLFdBQTRDLENBQzNELElBQUksQ0FBQyxPQUFPLEVBQ1osT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxlQUFlO0lBQ3hEOzs7OztPQUtHO0lBQ0gsWUFDRSxPQUFlLEVBQ2YsVUFBeUIsRUFBRTtRQUUzQixLQUFLLENBQUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNPLGlCQUFpQixDQUFDLE9BQXNCO1FBQ2hELE9BQU8sSUFBSyxJQUFJLENBQUMsV0FBNEMsQ0FDM0QsSUFBSSxDQUFDLE9BQU8sRUFDWixPQUFPLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUMxQixNQUFjLEVBQ2QsTUFBYyxFQUNkLFVBQXlCLEVBQUU7UUFFM0IsT0FBTyxJQUFJLHFCQUFxQixDQUM5QiwrQkFBK0IsTUFBTSxVQUFVLE1BQU0sb0JBQW9CLEVBQ3pFO1lBQ0UsR0FBRyxPQUFPO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLEdBQUcsT0FBTyxDQUFDLElBQUk7Z0JBQ2YsTUFBTTtnQkFDTixNQUFNO2FBQ1A7WUFDRCxXQUFXLEVBQUUsZ0NBQWdDLE1BQU0sR0FBRztTQUN2RCxDQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxhQUFhO0lBQ2pEOzs7OztPQUtHO0lBQ0gsWUFDRSxPQUFlLEVBQ2YsVUFBeUIsRUFBRTtRQUUzQixLQUFLLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNPLGlCQUFpQixDQUFDLE9BQXNCO1FBQ2hELE9BQU8sSUFBSyxJQUFJLENBQUMsV0FBdUMsQ0FDdEQsSUFBSSxDQUFDLE9BQU8sRUFDWixPQUFPLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDOUIsRUFBVSxFQUNWLE1BQWMsRUFDZCxLQUFhLEVBQ2IsSUFBWSxFQUNaLFVBQXlCLEVBQUU7UUFFM0IsT0FBTyxJQUFJLGdCQUFnQixDQUN6Qix1Q0FBdUMsRUFBRSxlQUFlLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxFQUFFLEVBQ2xGO1lBQ0UsR0FBRyxPQUFPO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLEdBQUcsT0FBTyxDQUFDLElBQUk7Z0JBQ2YsRUFBRTtnQkFDRixNQUFNO2dCQUNOLEtBQUs7Z0JBQ0wsSUFBSTthQUNMO1lBQ0QsV0FBVyxFQUFFLG1DQUFtQyxNQUFNLEdBQUc7U0FDMUQsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZUFBZTtJQUN0RDs7Ozs7T0FLRztJQUNILFlBQ0UsT0FBZSxFQUNmLFVBQXlCLEVBQUU7UUFFM0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUIsQ0FBQyxPQUFzQjtRQUNoRCxPQUFPLElBQUssSUFBSSxDQUFDLFdBQTBDLENBQ3pELElBQUksQ0FBQyxPQUFPLEVBQ1osT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==