@tonytang99/integration-core 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/builder.d.ts +83 -0
- package/dist/pipeline/builder.d.ts.map +1 -0
- package/dist/pipeline/builder.js +210 -0
- package/dist/pipeline/builder.js.map +1 -0
- package/dist/pipeline/context.d.ts +43 -16
- package/dist/pipeline/context.d.ts.map +1 -1
- package/dist/pipeline/context.js +80 -7
- package/dist/pipeline/context.js.map +1 -1
- package/dist/pipeline/executor.d.ts +24 -0
- package/dist/pipeline/executor.d.ts.map +1 -0
- package/dist/pipeline/executor.js +136 -0
- package/dist/pipeline/executor.js.map +1 -0
- package/dist/pipeline/iterators.d.ts +74 -0
- package/dist/pipeline/iterators.d.ts.map +1 -0
- package/dist/pipeline/iterators.js +244 -0
- package/dist/pipeline/iterators.js.map +1 -0
- package/dist/pipeline/middleware.d.ts +26 -0
- package/dist/pipeline/middleware.d.ts.map +1 -0
- package/dist/pipeline/middleware.js +69 -0
- package/dist/pipeline/middleware.js.map +1 -0
- package/dist/pipeline/phase.d.ts +25 -3
- package/dist/pipeline/phase.d.ts.map +1 -1
- package/dist/pipeline/phase.js +33 -3
- package/dist/pipeline/phase.js.map +1 -1
- package/dist/pipeline/retry.d.ts +57 -0
- package/dist/pipeline/retry.d.ts.map +1 -0
- package/dist/pipeline/retry.js +139 -0
- package/dist/pipeline/retry.js.map +1 -0
- package/dist/registry/phase-registry.d.ts +24 -0
- package/dist/registry/phase-registry.d.ts.map +1 -0
- package/dist/registry/phase-registry.js +69 -0
- package/dist/registry/phase-registry.js.map +1 -0
- package/dist/slots/well-known-slots.d.ts +27 -0
- package/dist/slots/well-known-slots.d.ts.map +1 -0
- package/dist/slots/well-known-slots.js +31 -0
- package/dist/slots/well-known-slots.js.map +1 -0
- package/dist/types/common.d.ts +45 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +11 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/errors.d.ts +62 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +262 -0
- package/dist/types/errors.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorCategory = void 0;
|
|
4
|
+
exports.categorizeError = categorizeError;
|
|
5
|
+
exports.isRetryableCategory = isRetryableCategory;
|
|
6
|
+
exports.validationError = validationError;
|
|
7
|
+
exports.notFoundError = notFoundError;
|
|
8
|
+
exports.rateLimitError = rateLimitError;
|
|
9
|
+
/**
|
|
10
|
+
* Categories of errors for classification and handling decisions
|
|
11
|
+
*/
|
|
12
|
+
var ErrorCategory;
|
|
13
|
+
(function (ErrorCategory) {
|
|
14
|
+
/** Input validation failures */
|
|
15
|
+
ErrorCategory["VALIDATION"] = "VALIDATION";
|
|
16
|
+
/** Network connectivity issues */
|
|
17
|
+
ErrorCategory["NETWORK"] = "NETWORK";
|
|
18
|
+
/** Authentication failures (invalid credentials, expired tokens) */
|
|
19
|
+
ErrorCategory["AUTHENTICATION"] = "AUTHENTICATION";
|
|
20
|
+
/** Authorization failures (insufficient permissions) */
|
|
21
|
+
ErrorCategory["AUTHORIZATION"] = "AUTHORIZATION";
|
|
22
|
+
/** Rate limiting / throttling */
|
|
23
|
+
ErrorCategory["RATE_LIMIT"] = "RATE_LIMIT";
|
|
24
|
+
/** Resource not found */
|
|
25
|
+
ErrorCategory["NOT_FOUND"] = "NOT_FOUND";
|
|
26
|
+
/** Conflict (e.g., duplicate, optimistic lock failure) */
|
|
27
|
+
ErrorCategory["CONFLICT"] = "CONFLICT";
|
|
28
|
+
/** Business logic errors */
|
|
29
|
+
ErrorCategory["BUSINESS_LOGIC"] = "BUSINESS_LOGIC";
|
|
30
|
+
/** External service errors (5xx from APIs) */
|
|
31
|
+
ErrorCategory["SERVICE_ERROR"] = "SERVICE_ERROR";
|
|
32
|
+
/** Timeout errors */
|
|
33
|
+
ErrorCategory["TIMEOUT"] = "TIMEOUT";
|
|
34
|
+
/** Internal system errors */
|
|
35
|
+
ErrorCategory["SYSTEM"] = "SYSTEM";
|
|
36
|
+
/** Unknown/unclassified errors */
|
|
37
|
+
ErrorCategory["UNKNOWN"] = "UNKNOWN";
|
|
38
|
+
})(ErrorCategory || (exports.ErrorCategory = ErrorCategory = {}));
|
|
39
|
+
/**
|
|
40
|
+
* Mapping of HTTP status codes to error categories
|
|
41
|
+
*/
|
|
42
|
+
const HTTP_STATUS_CATEGORY_MAP = {
|
|
43
|
+
400: ErrorCategory.VALIDATION,
|
|
44
|
+
401: ErrorCategory.AUTHENTICATION,
|
|
45
|
+
403: ErrorCategory.AUTHORIZATION,
|
|
46
|
+
404: ErrorCategory.NOT_FOUND,
|
|
47
|
+
408: ErrorCategory.TIMEOUT,
|
|
48
|
+
409: ErrorCategory.CONFLICT,
|
|
49
|
+
422: ErrorCategory.VALIDATION,
|
|
50
|
+
429: ErrorCategory.RATE_LIMIT,
|
|
51
|
+
500: ErrorCategory.SERVICE_ERROR,
|
|
52
|
+
502: ErrorCategory.SERVICE_ERROR,
|
|
53
|
+
503: ErrorCategory.SERVICE_ERROR,
|
|
54
|
+
504: ErrorCategory.TIMEOUT,
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Mapping of error codes/patterns to categories
|
|
58
|
+
*/
|
|
59
|
+
const ERROR_CODE_PATTERNS = [
|
|
60
|
+
{ pattern: /^(ECONNREFUSED|ENOTFOUND|ECONNRESET|EPIPE|ETIMEDOUT)$/i, category: ErrorCategory.NETWORK },
|
|
61
|
+
{ pattern: /^(TIMEOUT|TIMED_OUT|REQUEST_TIMEOUT)$/i, category: ErrorCategory.TIMEOUT },
|
|
62
|
+
{ pattern: /^(RATE_LIMIT|THROTTL|TOO_MANY_REQUESTS)$/i, category: ErrorCategory.RATE_LIMIT },
|
|
63
|
+
{ pattern: /^(AUTH|UNAUTHORIZED|UNAUTHENTICATED|TOKEN_EXPIRED|INVALID_TOKEN)$/i, category: ErrorCategory.AUTHENTICATION },
|
|
64
|
+
{ pattern: /^(FORBIDDEN|ACCESS_DENIED|PERMISSION_DENIED)$/i, category: ErrorCategory.AUTHORIZATION },
|
|
65
|
+
{ pattern: /^(NOT_FOUND|RESOURCE_NOT_FOUND|MISSING)$/i, category: ErrorCategory.NOT_FOUND },
|
|
66
|
+
{ pattern: /^(CONFLICT|DUPLICATE|ALREADY_EXISTS|OPTIMISTIC_LOCK)$/i, category: ErrorCategory.CONFLICT },
|
|
67
|
+
{ pattern: /^(VALIDATION|INVALID|REQUIRED|FORMAT)$/i, category: ErrorCategory.VALIDATION },
|
|
68
|
+
{ pattern: /^(INTERNAL|SYSTEM|FATAL)$/i, category: ErrorCategory.SYSTEM },
|
|
69
|
+
];
|
|
70
|
+
/**
|
|
71
|
+
* Categories that are generally safe to retry
|
|
72
|
+
*/
|
|
73
|
+
const RETRYABLE_CATEGORIES = new Set([
|
|
74
|
+
ErrorCategory.NETWORK,
|
|
75
|
+
ErrorCategory.TIMEOUT,
|
|
76
|
+
ErrorCategory.RATE_LIMIT,
|
|
77
|
+
ErrorCategory.SERVICE_ERROR,
|
|
78
|
+
]);
|
|
79
|
+
/**
|
|
80
|
+
* Categorizes an error for handling decisions
|
|
81
|
+
*/
|
|
82
|
+
function categorizeError(error, phaseName = 'unknown') {
|
|
83
|
+
// If already categorized, return as-is
|
|
84
|
+
if (isCategorizedError(error)) {
|
|
85
|
+
return error;
|
|
86
|
+
}
|
|
87
|
+
// Start with base pipeline error
|
|
88
|
+
const baseError = toPipelineError(error, phaseName);
|
|
89
|
+
// Try to determine category
|
|
90
|
+
let category = ErrorCategory.UNKNOWN;
|
|
91
|
+
let httpStatus;
|
|
92
|
+
let retryAfterMs;
|
|
93
|
+
// Check for HTTP status in error data
|
|
94
|
+
if (baseError.data?.httpStatus) {
|
|
95
|
+
httpStatus = baseError.data.httpStatus;
|
|
96
|
+
category = HTTP_STATUS_CATEGORY_MAP[httpStatus] ?? ErrorCategory.UNKNOWN;
|
|
97
|
+
// Check for Retry-After header
|
|
98
|
+
if (baseError.data.retryAfter) {
|
|
99
|
+
retryAfterMs = parseRetryAfter(baseError.data.retryAfter);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// If still unknown, try matching error code patterns
|
|
103
|
+
if (category === ErrorCategory.UNKNOWN && baseError.code) {
|
|
104
|
+
for (const { pattern, category: cat } of ERROR_CODE_PATTERNS) {
|
|
105
|
+
if (pattern.test(baseError.code)) {
|
|
106
|
+
category = cat;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Check error message for common patterns if still unknown
|
|
112
|
+
if (category === ErrorCategory.UNKNOWN) {
|
|
113
|
+
const message = baseError.message.toLowerCase();
|
|
114
|
+
if (message.includes('timeout') || message.includes('timed out')) {
|
|
115
|
+
category = ErrorCategory.TIMEOUT;
|
|
116
|
+
}
|
|
117
|
+
else if (message.includes('network') || message.includes('connection')) {
|
|
118
|
+
category = ErrorCategory.NETWORK;
|
|
119
|
+
}
|
|
120
|
+
else if (message.includes('rate limit') || message.includes('too many')) {
|
|
121
|
+
category = ErrorCategory.RATE_LIMIT;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Determine if error is recoverable based on category
|
|
125
|
+
const recoverable = baseError.recoverable ?? RETRYABLE_CATEGORIES.has(category);
|
|
126
|
+
return {
|
|
127
|
+
...baseError,
|
|
128
|
+
category,
|
|
129
|
+
httpStatus,
|
|
130
|
+
retryAfterMs,
|
|
131
|
+
recoverable,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Converts any error to a PipelineError
|
|
136
|
+
*/
|
|
137
|
+
function toPipelineError(error, phaseName) {
|
|
138
|
+
if (isPipelineError(error)) {
|
|
139
|
+
return error;
|
|
140
|
+
}
|
|
141
|
+
if (error instanceof Error) {
|
|
142
|
+
return {
|
|
143
|
+
phase: phaseName,
|
|
144
|
+
code: error.code ?? 'ERROR',
|
|
145
|
+
message: error.message,
|
|
146
|
+
recoverable: true,
|
|
147
|
+
stack: error.stack,
|
|
148
|
+
data: extractErrorData(error),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
phase: phaseName,
|
|
153
|
+
code: 'UNKNOWN_ERROR',
|
|
154
|
+
message: String(error),
|
|
155
|
+
recoverable: true,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Extracts useful data from error objects
|
|
160
|
+
*/
|
|
161
|
+
function extractErrorData(error) {
|
|
162
|
+
const data = {};
|
|
163
|
+
const errorAny = error;
|
|
164
|
+
// Common properties from HTTP/API errors
|
|
165
|
+
if (errorAny.status)
|
|
166
|
+
data.httpStatus = errorAny.status;
|
|
167
|
+
if (errorAny.statusCode)
|
|
168
|
+
data.httpStatus = errorAny.statusCode;
|
|
169
|
+
if (errorAny.response?.status)
|
|
170
|
+
data.httpStatus = errorAny.response.status;
|
|
171
|
+
// Retry-After header
|
|
172
|
+
if (errorAny.headers?.['retry-after'])
|
|
173
|
+
data.retryAfter = errorAny.headers['retry-after'];
|
|
174
|
+
if (errorAny.response?.headers?.['retry-after'])
|
|
175
|
+
data.retryAfter = errorAny.response.headers['retry-after'];
|
|
176
|
+
// Request/response details
|
|
177
|
+
if (errorAny.config?.url)
|
|
178
|
+
data.url = errorAny.config.url;
|
|
179
|
+
if (errorAny.config?.method)
|
|
180
|
+
data.method = errorAny.config.method;
|
|
181
|
+
return Object.keys(data).length > 0 ? data : undefined;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Parses Retry-After header value to milliseconds
|
|
185
|
+
*/
|
|
186
|
+
function parseRetryAfter(value) {
|
|
187
|
+
if (typeof value === 'number') {
|
|
188
|
+
return value * 1000; // Assume seconds
|
|
189
|
+
}
|
|
190
|
+
if (typeof value === 'string') {
|
|
191
|
+
// Try as number of seconds
|
|
192
|
+
const seconds = parseInt(value, 10);
|
|
193
|
+
if (!isNaN(seconds)) {
|
|
194
|
+
return seconds * 1000;
|
|
195
|
+
}
|
|
196
|
+
// Try as HTTP date
|
|
197
|
+
const date = new Date(value);
|
|
198
|
+
if (!isNaN(date.getTime())) {
|
|
199
|
+
const delay = date.getTime() - Date.now();
|
|
200
|
+
return delay > 0 ? delay : undefined;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
205
|
+
function isPipelineError(error) {
|
|
206
|
+
return (typeof error === 'object' &&
|
|
207
|
+
error !== null &&
|
|
208
|
+
'phase' in error &&
|
|
209
|
+
'code' in error &&
|
|
210
|
+
'message' in error);
|
|
211
|
+
}
|
|
212
|
+
function isCategorizedError(error) {
|
|
213
|
+
return isPipelineError(error) && 'category' in error;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Helper to check if an error category is retryable
|
|
217
|
+
*/
|
|
218
|
+
function isRetryableCategory(category) {
|
|
219
|
+
return RETRYABLE_CATEGORIES.has(category);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Helper to create a validation error
|
|
223
|
+
*/
|
|
224
|
+
function validationError(phase, message, field) {
|
|
225
|
+
return {
|
|
226
|
+
phase,
|
|
227
|
+
code: 'VALIDATION_ERROR',
|
|
228
|
+
message,
|
|
229
|
+
category: ErrorCategory.VALIDATION,
|
|
230
|
+
recoverable: false,
|
|
231
|
+
data: field ? { field } : undefined,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Helper to create a not found error
|
|
236
|
+
*/
|
|
237
|
+
function notFoundError(phase, resource, id) {
|
|
238
|
+
return {
|
|
239
|
+
phase,
|
|
240
|
+
code: 'NOT_FOUND',
|
|
241
|
+
message: id ? `${resource} with id "${id}" not found` : `${resource} not found`,
|
|
242
|
+
category: ErrorCategory.NOT_FOUND,
|
|
243
|
+
recoverable: false,
|
|
244
|
+
httpStatus: 404,
|
|
245
|
+
data: { resource, id },
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Helper to create a rate limit error
|
|
250
|
+
*/
|
|
251
|
+
function rateLimitError(phase, retryAfterMs) {
|
|
252
|
+
return {
|
|
253
|
+
phase,
|
|
254
|
+
code: 'RATE_LIMITED',
|
|
255
|
+
message: 'Rate limit exceeded',
|
|
256
|
+
category: ErrorCategory.RATE_LIMIT,
|
|
257
|
+
recoverable: true,
|
|
258
|
+
httpStatus: 429,
|
|
259
|
+
retryAfterMs,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"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"}
|