@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.
- package/dist_serve/bundle.js +1 -1
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts_web/00_commitinfo_data.js +2 -2
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/dist_ts/errors/error-handler.d.ts +0 -98
- package/dist_ts/errors/error-handler.js +0 -282
- package/dist_ts/errors/reputation.errors.d.ts +0 -183
- package/dist_ts/errors/reputation.errors.js +0 -292
package/dist_serve/bundle.js
CHANGED
|
@@ -39328,4 +39328,4 @@ ibantools/jsnext/ibantools.js:
|
|
|
39328
39328
|
* @preferred
|
|
39329
39329
|
*)
|
|
39330
39330
|
*/
|
|
39331
|
-
//# sourceMappingURL=bundle-
|
|
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.
|
|
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,
|
|
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.
|
|
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,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
|
package/package.json
CHANGED
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -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==
|