@resolveio/server-lib 20.11.3 → 20.11.4
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/package.json +1 -1
- package/util/error-reporter.d.ts +0 -33
- package/util/error-reporter.js +7 -249
- package/util/error-reporter.js.map +1 -1
- package/collections/error-auto-fix.collection.d.ts +0 -3
- package/collections/error-auto-fix.collection.js +0 -266
- package/collections/error-auto-fix.collection.js.map +0 -1
- package/models/error-auto-fix-log.model.d.ts +0 -47
- package/models/error-auto-fix-log.model.js +0 -4
- package/models/error-auto-fix-log.model.js.map +0 -1
package/package.json
CHANGED
package/util/error-reporter.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
type LoggerLike = Pick<typeof console, 'error' | 'warn' | 'info' | 'log'>;
|
|
2
|
-
type ResolveIoInsertOverride = (payload: ErrorReportPayload, logger: LoggerLike) => Promise<ErrorReportResult>;
|
|
3
|
-
export declare function __setResolveIoInsertOverrideForTesting(fn: ResolveIoInsertOverride | null): void;
|
|
4
1
|
type FetchLike = (input: RequestInfo, init?: RequestInit) => Promise<Response>;
|
|
5
2
|
export interface ErrorReportAttachment {
|
|
6
3
|
name: string;
|
|
@@ -49,36 +46,6 @@ export interface ErrorReportResult {
|
|
|
49
46
|
status?: number;
|
|
50
47
|
reason?: string;
|
|
51
48
|
}
|
|
52
|
-
interface ErrorReportPayload {
|
|
53
|
-
sourceApp: string;
|
|
54
|
-
message: string;
|
|
55
|
-
environment?: string;
|
|
56
|
-
clientId?: string;
|
|
57
|
-
clientSlug?: string;
|
|
58
|
-
clientName?: string;
|
|
59
|
-
clientRepo?: string;
|
|
60
|
-
clientEmail?: string;
|
|
61
|
-
severity: string;
|
|
62
|
-
stack?: string;
|
|
63
|
-
context?: Record<string, any> | string;
|
|
64
|
-
metadata?: Record<string, any> | string;
|
|
65
|
-
attachments?: ErrorReportAttachment[];
|
|
66
|
-
fingerprint?: string;
|
|
67
|
-
idempotencyKey?: string;
|
|
68
|
-
reportedBy?: string;
|
|
69
|
-
reportedAt?: string;
|
|
70
|
-
reportedFor?: string;
|
|
71
|
-
reportedCount?: number;
|
|
72
|
-
reportedSourceHost?: string;
|
|
73
|
-
reportedSourceIp?: string;
|
|
74
|
-
reportedSourceVersion?: string;
|
|
75
|
-
reportedSourcePid?: number;
|
|
76
|
-
reportedSourceInstance?: string;
|
|
77
|
-
reportedSourceRegion?: string;
|
|
78
|
-
reportedSourceCluster?: string;
|
|
79
|
-
reportedSourceProcess?: string;
|
|
80
|
-
reportedSourceEnv?: Record<string, any>;
|
|
81
|
-
}
|
|
82
49
|
export declare class ErrorReporter {
|
|
83
50
|
static report(options: ErrorReportOptions): Promise<ErrorReportResult>;
|
|
84
51
|
}
|
package/util/error-reporter.js
CHANGED
|
@@ -63,18 +63,11 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
63
63
|
return ar;
|
|
64
64
|
};
|
|
65
65
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
|
-
exports.ErrorReporter =
|
|
66
|
+
exports.ErrorReporter = void 0;
|
|
67
67
|
var crypto_1 = require("crypto");
|
|
68
|
-
var error_auto_fix_collection_1 = require("../collections/error-auto-fix.collection");
|
|
69
68
|
var resolveio_server_app_1 = require("../resolveio-server-app");
|
|
70
|
-
var common_1 = require("./common");
|
|
71
69
|
var DEFAULT_ERROR_API_URL = 'https://backend.resolveio.com/api/errors/report';
|
|
72
70
|
var LOCAL_HOSTNAMES = new Set(['localhost', '127.0.0.1', '0.0.0.0', '::1']);
|
|
73
|
-
var resolveIoInsertOverride = null;
|
|
74
|
-
function __setResolveIoInsertOverrideForTesting(fn) {
|
|
75
|
-
resolveIoInsertOverride = fn;
|
|
76
|
-
}
|
|
77
|
-
exports.__setResolveIoInsertOverrideForTesting = __setResolveIoInsertOverrideForTesting;
|
|
78
71
|
var ErrorReporter = /** @class */ (function () {
|
|
79
72
|
function ErrorReporter() {
|
|
80
73
|
}
|
|
@@ -136,19 +129,15 @@ var ErrorReporter = /** @class */ (function () {
|
|
|
136
129
|
logger.error('ErrorReporter payload (suppressed):', payload);
|
|
137
130
|
return [2 /*return*/, { delivered: false, reason: 'local-environment' }];
|
|
138
131
|
}
|
|
139
|
-
if (!isResolveIOSelfClient(clientName)) return [3 /*break*/, 2];
|
|
140
|
-
return [4 /*yield*/, handleResolveIoSelfReport(payload, logger)];
|
|
141
|
-
case 1: return [2 /*return*/, _b.sent()];
|
|
142
|
-
case 2:
|
|
143
132
|
transport = options.fetch || globalThis.fetch;
|
|
144
133
|
if (typeof transport !== 'function') {
|
|
145
134
|
logger.error('ErrorReporter failed: fetch is not available in this runtime');
|
|
146
135
|
logger.error('ErrorReporter payload (not sent):', payload);
|
|
147
136
|
return [2 /*return*/, { delivered: false, reason: 'missing-fetch' }];
|
|
148
137
|
}
|
|
149
|
-
_b.label =
|
|
150
|
-
case
|
|
151
|
-
_b.trys.push([
|
|
138
|
+
_b.label = 1;
|
|
139
|
+
case 1:
|
|
140
|
+
_b.trys.push([1, 3, , 4]);
|
|
152
141
|
return [4 /*yield*/, transport(normalizedApiUrl, {
|
|
153
142
|
method: 'POST',
|
|
154
143
|
headers: removeEmptyFields({
|
|
@@ -159,19 +148,19 @@ var ErrorReporter = /** @class */ (function () {
|
|
|
159
148
|
}),
|
|
160
149
|
body: JSON.stringify(payload)
|
|
161
150
|
})];
|
|
162
|
-
case
|
|
151
|
+
case 2:
|
|
163
152
|
response = _b.sent();
|
|
164
153
|
if (!response.ok) {
|
|
165
154
|
logger.error('ErrorReporter failed to deliver payload', { status: response.status, statusText: response.statusText });
|
|
166
155
|
return [2 /*return*/, { delivered: false, status: response.status, reason: 'http-error' }];
|
|
167
156
|
}
|
|
168
157
|
return [2 /*return*/, { delivered: true, status: response.status }];
|
|
169
|
-
case
|
|
158
|
+
case 3:
|
|
170
159
|
err_1 = _b.sent();
|
|
171
160
|
logger.error('ErrorReporter exception while delivering payload', err_1);
|
|
172
161
|
logger.error('ErrorReporter payload (not sent):', payload);
|
|
173
162
|
return [2 /*return*/, { delivered: false, reason: 'network-error' }];
|
|
174
|
-
case
|
|
163
|
+
case 4: return [2 /*return*/];
|
|
175
164
|
}
|
|
176
165
|
});
|
|
177
166
|
});
|
|
@@ -345,228 +334,6 @@ function mergeMetadata(metadata, correlationId) {
|
|
|
345
334
|
}
|
|
346
335
|
return metadataObj;
|
|
347
336
|
}
|
|
348
|
-
function handleResolveIoSelfReport(payload, logger) {
|
|
349
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
350
|
-
var doc, upsertResult, err_2;
|
|
351
|
-
return __generator(this, function (_a) {
|
|
352
|
-
switch (_a.label) {
|
|
353
|
-
case 0:
|
|
354
|
-
if (!resolveIoInsertOverride) return [3 /*break*/, 2];
|
|
355
|
-
return [4 /*yield*/, resolveIoInsertOverride(payload, logger)];
|
|
356
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
357
|
-
case 2:
|
|
358
|
-
if (!error_auto_fix_collection_1.ErrorAutoFixLogs) {
|
|
359
|
-
logger.warn('ErrorReporter ResolveIO insert skipped: error-autofix collection unavailable');
|
|
360
|
-
logger.error('ErrorReporter payload (not inserted):', payload);
|
|
361
|
-
return [2 /*return*/, { delivered: false, reason: 'resolveio-no-collection' }];
|
|
362
|
-
}
|
|
363
|
-
_a.label = 3;
|
|
364
|
-
case 3:
|
|
365
|
-
_a.trys.push([3, 5, , 6]);
|
|
366
|
-
doc = buildResolveIoAutoFixDoc(payload);
|
|
367
|
-
return [4 /*yield*/, upsertResolveIoAutoFixLog(error_auto_fix_collection_1.ErrorAutoFixLogs, doc)];
|
|
368
|
-
case 4:
|
|
369
|
-
upsertResult = _a.sent();
|
|
370
|
-
return [2 /*return*/, {
|
|
371
|
-
delivered: true,
|
|
372
|
-
reason: upsertResult.duplicate ? 'resolveio-duplicate' : 'resolveio-insert'
|
|
373
|
-
}];
|
|
374
|
-
case 5:
|
|
375
|
-
err_2 = _a.sent();
|
|
376
|
-
logger.error('ErrorReporter failed to insert resolveio auto-fix log', err_2);
|
|
377
|
-
logger.error('ErrorReporter payload (not inserted):', payload);
|
|
378
|
-
return [2 /*return*/, { delivered: false, reason: 'resolveio-insert-failed' }];
|
|
379
|
-
case 6: return [2 /*return*/];
|
|
380
|
-
}
|
|
381
|
-
});
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
function buildResolveIoAutoFixDoc(payload) {
|
|
385
|
-
var timestamp = coerceReportedDate(payload.reportedAt);
|
|
386
|
-
var safeMessage = (payload.message || '').toString().trim() || 'Unknown error';
|
|
387
|
-
var subjectBase = "[AppError] ".concat(payload.sourceApp || 'application').concat(payload.environment ? " (".concat(payload.environment, ")") : '');
|
|
388
|
-
var subject = "".concat(subjectBase, " - ").concat(safeMessage.slice(0, 120));
|
|
389
|
-
var bodyLines = [
|
|
390
|
-
"Source App:\t".concat(payload.sourceApp || 'n/a'),
|
|
391
|
-
"Environment:\t".concat(payload.environment || 'n/a'),
|
|
392
|
-
"Severity:\t".concat(payload.severity || 'error'),
|
|
393
|
-
"Client Hint:\t".concat(payload.clientName || payload.clientSlug || payload.clientRepo || payload.clientId || 'n/a'),
|
|
394
|
-
"Reported By:\t".concat(payload.reportedBy || payload.clientEmail || 'n/a'),
|
|
395
|
-
"Reported At:\t".concat(timestamp.toISOString()),
|
|
396
|
-
"Message:\t".concat(safeMessage)
|
|
397
|
-
];
|
|
398
|
-
if (payload.stack) {
|
|
399
|
-
bodyLines.push('', 'Stack Trace:', payload.stack.toString());
|
|
400
|
-
}
|
|
401
|
-
if (isPlainObject(payload.context) && Object.keys(payload.context).length) {
|
|
402
|
-
bodyLines.push('', 'Context JSON:', JSON.stringify(payload.context, null, 2));
|
|
403
|
-
}
|
|
404
|
-
if (isPlainObject(payload.metadata) && Object.keys(payload.metadata).length) {
|
|
405
|
-
bodyLines.push('', 'Metadata JSON:', JSON.stringify(payload.metadata, null, 2));
|
|
406
|
-
}
|
|
407
|
-
var normalizedAttachments = normalizeAttachments(payload.attachments);
|
|
408
|
-
if (Array.isArray(normalizedAttachments) && normalizedAttachments.length) {
|
|
409
|
-
bodyLines.push('', 'Attachments:');
|
|
410
|
-
normalizedAttachments.forEach(function (att) {
|
|
411
|
-
var segments = [];
|
|
412
|
-
if (att.name) {
|
|
413
|
-
segments.push(att.name);
|
|
414
|
-
}
|
|
415
|
-
if (att.contentType) {
|
|
416
|
-
segments.push(att.contentType);
|
|
417
|
-
}
|
|
418
|
-
if (typeof att.size === 'number') {
|
|
419
|
-
segments.push("".concat(att.size, "b"));
|
|
420
|
-
}
|
|
421
|
-
var summary = segments.length ? segments.join(' | ') : 'attachment';
|
|
422
|
-
bodyLines.push("- ".concat(summary).concat(att.url ? " -> ".concat(att.url) : ''));
|
|
423
|
-
});
|
|
424
|
-
}
|
|
425
|
-
if (payload.fingerprint) {
|
|
426
|
-
bodyLines.push('', "Fingerprint:\t".concat(payload.fingerprint));
|
|
427
|
-
}
|
|
428
|
-
if (payload.idempotencyKey) {
|
|
429
|
-
bodyLines.push("Idempotency Key:\t".concat(payload.idempotencyKey));
|
|
430
|
-
}
|
|
431
|
-
var body = bodyLines.join('\n');
|
|
432
|
-
var rawHash = (payload.idempotencyKey || '').toString().trim() || generateResolveIoRawHash(subject, body);
|
|
433
|
-
var issueHash = (payload.fingerprint || '').toString().trim() || generateResolveIoIssueHash(subject, body);
|
|
434
|
-
var fromEmail = payload.reportedBy || payload.clientEmail || '';
|
|
435
|
-
var reportMetadata = isPlainObject(payload.metadata) ? payload.metadata : undefined;
|
|
436
|
-
var reportContext = isPlainObject(payload.context) ? payload.context : undefined;
|
|
437
|
-
return cleanUndefined({
|
|
438
|
-
_id: (0, common_1.objectIdHexString)(),
|
|
439
|
-
email_hash: rawHash,
|
|
440
|
-
issue_hash: issueHash,
|
|
441
|
-
subject: subject,
|
|
442
|
-
message_id: payload.idempotencyKey ? payload.idempotencyKey.toString() : undefined,
|
|
443
|
-
body: body,
|
|
444
|
-
status: 'pending',
|
|
445
|
-
ignored: false,
|
|
446
|
-
attempt_count: 0,
|
|
447
|
-
duplicate_count: 0,
|
|
448
|
-
first_seen_at: timestamp,
|
|
449
|
-
from_email: fromEmail,
|
|
450
|
-
id_client: payload.clientId,
|
|
451
|
-
client_name: payload.clientName || payload.clientSlug || undefined,
|
|
452
|
-
codex_environment: payload.clientRepo || payload.clientSlug || undefined,
|
|
453
|
-
source_app: payload.sourceApp,
|
|
454
|
-
source_environment: payload.environment,
|
|
455
|
-
severity: payload.severity,
|
|
456
|
-
reported_by: fromEmail,
|
|
457
|
-
last_reported_at: timestamp,
|
|
458
|
-
report_metadata: reportMetadata,
|
|
459
|
-
report_context: reportContext,
|
|
460
|
-
attachments: normalizedAttachments,
|
|
461
|
-
createdAt: timestamp,
|
|
462
|
-
updatedAt: timestamp
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
function upsertResolveIoAutoFixLog(collection, doc) {
|
|
466
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
467
|
-
var timestamp, existing, updateSet;
|
|
468
|
-
return __generator(this, function (_a) {
|
|
469
|
-
switch (_a.label) {
|
|
470
|
-
case 0:
|
|
471
|
-
timestamp = doc.first_seen_at || new Date();
|
|
472
|
-
existing = null;
|
|
473
|
-
if (!doc.issue_hash) return [3 /*break*/, 2];
|
|
474
|
-
return [4 /*yield*/, collection.findOne({ issue_hash: doc.issue_hash })];
|
|
475
|
-
case 1:
|
|
476
|
-
existing = _a.sent();
|
|
477
|
-
_a.label = 2;
|
|
478
|
-
case 2:
|
|
479
|
-
if (!(!existing && doc.email_hash)) return [3 /*break*/, 4];
|
|
480
|
-
return [4 /*yield*/, collection.findOne({ email_hash: doc.email_hash })];
|
|
481
|
-
case 3:
|
|
482
|
-
existing = _a.sent();
|
|
483
|
-
_a.label = 4;
|
|
484
|
-
case 4:
|
|
485
|
-
if (!existing) return [3 /*break*/, 6];
|
|
486
|
-
updateSet = cleanUndefined({
|
|
487
|
-
last_duplicate_at: timestamp,
|
|
488
|
-
last_reported_at: timestamp,
|
|
489
|
-
report_metadata: doc.report_metadata,
|
|
490
|
-
report_context: doc.report_context,
|
|
491
|
-
attachments: doc.attachments,
|
|
492
|
-
severity: doc.severity,
|
|
493
|
-
source_app: doc.source_app,
|
|
494
|
-
source_environment: doc.source_environment,
|
|
495
|
-
reported_by: doc.reported_by,
|
|
496
|
-
updatedAt: new Date()
|
|
497
|
-
});
|
|
498
|
-
return [4 /*yield*/, collection.updateOne({ _id: existing._id }, {
|
|
499
|
-
$inc: { duplicate_count: 1 },
|
|
500
|
-
$set: updateSet
|
|
501
|
-
})];
|
|
502
|
-
case 5:
|
|
503
|
-
_a.sent();
|
|
504
|
-
return [2 /*return*/, { duplicate: true, doc: existing }];
|
|
505
|
-
case 6: return [4 /*yield*/, collection.insertOne(doc)];
|
|
506
|
-
case 7:
|
|
507
|
-
_a.sent();
|
|
508
|
-
return [2 /*return*/, { duplicate: false, doc: doc }];
|
|
509
|
-
}
|
|
510
|
-
});
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
function generateResolveIoRawHash(subject, body) {
|
|
514
|
-
return (0, crypto_1.createHash)('sha256').update("".concat(subject || '', "\n").concat(body || ''), 'utf8').digest('hex');
|
|
515
|
-
}
|
|
516
|
-
function generateResolveIoIssueHash(subject, body) {
|
|
517
|
-
var normalizedSubject = normalizeTextForAutoFixHash(subject);
|
|
518
|
-
var normalizedBody = normalizeBodyForAutoFixHash(body);
|
|
519
|
-
return (0, crypto_1.createHash)('sha256').update("".concat(normalizedSubject, "\n").concat(normalizedBody), 'utf8').digest('hex');
|
|
520
|
-
}
|
|
521
|
-
function normalizeTextForAutoFixHash(value) {
|
|
522
|
-
if (!value) {
|
|
523
|
-
return '';
|
|
524
|
-
}
|
|
525
|
-
var normalized = value
|
|
526
|
-
.replace(/\r/g, '\n')
|
|
527
|
-
.toLowerCase()
|
|
528
|
-
.replace(/0x[0-9a-f]+/gi, '0x#')
|
|
529
|
-
.replace(/\b[0-9a-f]{7,64}\b/gi, '#')
|
|
530
|
-
.replace(/\b[0-9]{4}[-/][0-9]{2}[-/][0-9]{2}(?:[ t][0-9]{2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]{1,6})?)?\b/g, '#datetime#')
|
|
531
|
-
.replace(/\b[0-9]{2}:[0-9]{2}:[0-9]{2}\b/g, '#time#')
|
|
532
|
-
.replace(/[0-9]+/g, '#')
|
|
533
|
-
.replace(/[^\S\n]+/g, ' ')
|
|
534
|
-
.split('\n')
|
|
535
|
-
.map(function (line) { return line.trim(); })
|
|
536
|
-
.filter(Boolean)
|
|
537
|
-
.slice(0, 60)
|
|
538
|
-
.join('\n');
|
|
539
|
-
return normalized.length > 4000 ? normalized.slice(0, 4000) : normalized;
|
|
540
|
-
}
|
|
541
|
-
function normalizeBodyForAutoFixHash(body) {
|
|
542
|
-
if (!body) {
|
|
543
|
-
return '';
|
|
544
|
-
}
|
|
545
|
-
var withoutStackNoise = body
|
|
546
|
-
.replace(/=+\s*stack trace\s*=+/gi, 'stack trace')
|
|
547
|
-
.replace(/-{3,}/g, '-')
|
|
548
|
-
.replace(/\[[^\]]*request id[^\]]*\]/gi, '[request id]')
|
|
549
|
-
.replace(/guid:[^\s]+/gi, 'guid:#')
|
|
550
|
-
.replace(/request id:[^\s]+/gi, 'request id:#')
|
|
551
|
-
.replace(/correlation id:[^\s]+/gi, 'correlation id:#');
|
|
552
|
-
return normalizeTextForAutoFixHash(withoutStackNoise);
|
|
553
|
-
}
|
|
554
|
-
function cleanUndefined(obj) {
|
|
555
|
-
var cleaned = {};
|
|
556
|
-
Object.keys(obj || {}).forEach(function (key) {
|
|
557
|
-
if (typeof obj[key] !== 'undefined') {
|
|
558
|
-
cleaned[key] = obj[key];
|
|
559
|
-
}
|
|
560
|
-
});
|
|
561
|
-
return cleaned;
|
|
562
|
-
}
|
|
563
|
-
function coerceReportedDate(value) {
|
|
564
|
-
if (!value) {
|
|
565
|
-
return new Date();
|
|
566
|
-
}
|
|
567
|
-
var coerced = new Date(value);
|
|
568
|
-
return Number.isNaN(coerced.getTime()) ? new Date() : coerced;
|
|
569
|
-
}
|
|
570
337
|
function shouldSuppressForLocalEnvironment(config, apiUrl) {
|
|
571
338
|
if (isLocalUrl(config === null || config === void 0 ? void 0 : config.ROOT_URL) || isLocalUrl(config === null || config === void 0 ? void 0 : config.SERVER_URL) || process.env.NODE_ENV === 'development') {
|
|
572
339
|
return true;
|
|
@@ -585,14 +352,5 @@ function isLocalUrl(url) {
|
|
|
585
352
|
return /localhost|127\.0\.0\.1|0\.0\.0\.0|::1/.test(url);
|
|
586
353
|
}
|
|
587
354
|
}
|
|
588
|
-
function isResolveIOSelfClient(clientName) {
|
|
589
|
-
if (!clientName) {
|
|
590
|
-
return false;
|
|
591
|
-
}
|
|
592
|
-
return clientName.toLowerCase() === 'resolveio';
|
|
593
|
-
}
|
|
594
|
-
function isPlainObject(value) {
|
|
595
|
-
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
596
|
-
}
|
|
597
355
|
|
|
598
356
|
//# sourceMappingURL=error-reporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/error-reporter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAoC;AACpC,sFAA4E;AAG5E,gEAA0D;AAC1D,mCAA6C;AAE7C,IAAM,qBAAqB,GAAG,iDAAiD,CAAC;AAChF,IAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AAK9E,IAAI,uBAAuB,GAAmC,IAAI,CAAC;AAEnE,SAAgB,sCAAsC,CAAC,EAAkC;IACxF,uBAAuB,GAAG,EAAE,CAAC;AAC9B,CAAC;AAFD,wFAEC;AAsFD;IAAA;IA2FA,CAAC;IA1FoB,oBAAM,GAA1B,UAA2B,OAA2B;;;;;;;wBAC/C,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;wBACnC,MAAM,GAAG,eAAe,EAAE,CAAC;wBAC3B,gBAAgB,GAAG,OAAO,CAAC,MAAM,IAAI,qBAAqB,CAAC;wBAC3D,UAAU,GAAG,OAAO,CAAC,UAAU,KAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,KAAI,MAAA,sCAAe,CAAC,aAAa,sFAAI,CAAA,IAAI,WAAW,CAAC;wBAC3G,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,IAAI,sBAAsB,CAAC;wBACtE,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAA,KAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAA,KAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAA,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;wBACxK,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,0BAA0B,CAAC;wBAC3E,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;wBACvC,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;wBACvD,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;wBACtE,QAAQ,GAAG,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;wBACvF,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBACzG,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;wBAChG,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;wBACxC,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBACrD,2BAA2B,GAAG,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;wBAC7E,OAAO,GAAuB,iBAAiB,CAAC;4BACrD,SAAS,WAAA;4BACT,OAAO,SAAA;4BACP,WAAW,aAAA;4BACX,QAAQ,EAAE,OAAO,CAAC,QAAQ;4BAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;4BAC9B,UAAU,YAAA;4BACV,UAAU,EAAE,OAAO,CAAC,UAAU;4BAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;4BAChC,QAAQ,UAAA;4BACR,KAAK,OAAA;4BACL,OAAO,SAAA;4BACP,QAAQ,UAAA;4BACR,WAAW,aAAA;4BACX,WAAW,aAAA;4BACX,cAAc,gBAAA;4BACd,UAAU,EAAE,OAAO,CAAC,UAAU;4BAC9B,UAAU,YAAA;4BACV,WAAW,EAAE,OAAO,CAAC,WAAW;4BAChC,aAAa,EAAE,OAAO,CAAC,aAAa;4BACpC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;4BAC9C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;4BAC1C,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;4BACpD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;4BAC5C,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;4BACtD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;4BAClD,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;4BACpD,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;4BACpD,iBAAiB,EAAE,OAAO,2BAA2B,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2BAAkD;yBACnI,CAAC,CAAC;wBAEH,IAAI,iCAAiC,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE;4BAChE,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;4BACpE,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC;4BAC7D,sBAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAC;yBACzD;6BAEG,qBAAqB,CAAC,UAAU,CAAC,EAAjC,wBAAiC;wBAC7B,qBAAM,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAA;4BAAvD,sBAAO,SAAgD,EAAC;;wBAGnD,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;wBACpD,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;4BACpC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;4BAC7E,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;4BAC3D,sBAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,EAAC;yBACrD;;;;wBAGiB,qBAAM,SAAS,CAAC,gBAAgB,EAAE;gCAClD,MAAM,EAAE,MAAM;gCACd,OAAO,EAAE,iBAAiB,CAAC;oCAC1B,cAAc,EAAE,kBAAkB;oCAClC,uBAAuB,EAAE,UAAU;oCACnC,wBAAwB,EAAE,WAAW;oCACrC,6BAA6B,EAAE,cAAc;iCAC7C,CAAC;gCACF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;6BAC7B,CAAC,EAAA;;wBATI,QAAQ,GAAG,SASf;wBAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;4BACjB,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;4BACtH,sBAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,EAAC;yBAC3E;wBAED,sBAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAC;;;wBAGpD,MAAM,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAG,CAAC,CAAC;wBACtE,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;wBAC3D,sBAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,EAAC;;;;;KAEtD;IACF,oBAAC;AAAD,CA3FA,AA2FC,IAAA;AA3FY,sCAAa;AA6F1B,SAAS,eAAe;;IACvB,IAAI;QACH,OAAO,CAAA,MAAA,sCAAe,CAAC,eAAe,sFAAI,KAAI,IAAI,CAAC;KACnD;IACD,OAAO,GAAG,EAAE;QACX,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;KACZ;AACF,CAAC;AAED,SAAS,cAAc,CAAC,KAAgC;IACvD,IAAI,CAAC,KAAK,EAAE;QACX,OAAO,SAAS,CAAC;KACjB;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,OAAO,KAAK,CAAC;KACb;IAED,IAAI,KAAK,YAAY,KAAK,EAAE;QAC3B,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;KACpC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAA6B,CAAC,KAAK,KAAK,QAAQ,EAAE;QAC5G,OAAQ,KAA6B,CAAC,KAAK,CAAC;KAC5C;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAA6B,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC9G,OAAQ,KAA6B,CAAC,OAAO,CAAC;KAC9C;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAU,EAAE,aAAsB;IAC9D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAC1C,OAAO,SAAS,CAAC;KACjB;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,OAAO,KAAK,CAAC;KACb;IAED,IAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,aAAa,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;QACxG,UAAU,CAAC,aAAa,GAAG,aAAa,CAAC;KACzC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,KAAU,EAAE,IAAqC;;IAArC,qBAAA,EAAA,WAA4B,OAAO,EAAE;IACxE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QAC1C,OAAO,KAAK,CAAC;KACb;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;QACzF,OAAO,KAAK,CAAC;KACb;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;KACxB;IAED,IAAI,KAAK,YAAY,IAAI,EAAE;QAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;KAC3B;IAED,IAAI,KAAK,YAAY,KAAK,EAAE;QAC3B,IAAM,IAAI,GAAG;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;SAClB,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;KAC/E;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpB,OAAO,YAAY,CAAC;SACpB;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,EAA1B,CAA0B,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,GAAG,CAAC;KACX;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpB,OAAO,YAAY,CAAC;SACpB;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,IAAM,GAAG,GAAwB,EAAE,CAAC;;YACpC,KAAyB,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,gBAAA,4BAAE;gBAArC,IAAA,KAAA,mBAAU,EAAT,GAAG,QAAA,EAAE,GAAG,QAAA;gBACnB,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aACrC;;;;;;;;;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,GAAG,CAAC;KACX;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAoC;IACjE,OAAO,WAAW;SAChB,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAhC,CAAgC,CAAC;SAC/C,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,iBAAiB,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KACzD,CAAC,EALU,CAKV,CAAC;SACF,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,IAAI,EAAV,CAAU,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAqB;IACjD,IAAI,CAAC,KAAK,EAAE;QACX,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;KAChC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE;QAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;KAC3B;IAED,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;QAC3B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;KAC1B;IAED,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB,EAAE,WAA+B,EAAE,OAAe,EAAE,KAAc;IAC9G,IAAM,SAAS,GAAG,UAAG,SAAS,IAAI,EAAE,cAAI,WAAW,IAAI,EAAE,cAAI,OAAO,IAAI,EAAE,cAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;IACrI,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,iBAAiB,CAAgC,GAAM;;IAC/D,IAAM,OAAO,GAAwB,EAAE,CAAC;;QACxC,KAA2B,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA,gBAAA,4BAAE;YAA3C,IAAA,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;YACrB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;gBAC1D,SAAS;aACT;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACrB;;;;;;;;;IACD,OAAO,OAAY,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAAC,QAAyD,EAAE,aAAsB;IACvG,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,EAAE;QAChC,OAAO,SAAS,CAAC;KACjB;IAED,IAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,IAAI,CAAC,aAAa,EAAE;QACnB,OAAO,IAAI,CAAC;KACZ;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC7B,OAAO;YACN,aAAa,eAAA;YACb,OAAO,EAAE,IAAI;SACb,CAAC;KACF;IAED,IAAM,WAAW,GAAG,CAAC,IAAI,IAAI,EAAE,CAAwB,CAAC;IACxD,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;QAC/B,WAAW,CAAC,aAAa,GAAG,aAAa,CAAC;KAC1C;IACD,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,SAAe,yBAAyB,CAAC,OAA2B,EAAE,MAAkB;;;;;;yBACnF,uBAAuB,EAAvB,wBAAuB;oBACnB,qBAAM,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAA;wBAArD,sBAAO,SAA8C,EAAC;;oBAGvD,IAAI,CAAC,4CAAgB,EAAE;wBACtB,MAAM,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;wBAC5F,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAC;wBAC/D,sBAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,EAAC;qBAC/D;;;;oBAGM,GAAG,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;oBACzB,qBAAM,yBAAyB,CAAC,4CAAgB,EAAE,GAAG,CAAC,EAAA;;oBAArE,YAAY,GAAG,SAAsD;oBAC3E,sBAAO;4BACN,SAAS,EAAE,IAAI;4BACf,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,kBAAkB;yBAC3E,EAAC;;;oBAGF,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAG,CAAC,CAAC;oBAC3E,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAC;oBAC/D,sBAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,EAAC;;;;;CAEhE;AAED,SAAS,wBAAwB,CAAC,OAA2B;IAC5D,IAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzD,IAAM,WAAW,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC;IACjF,IAAM,WAAW,GAAG,qBAAc,OAAO,CAAC,SAAS,IAAI,aAAa,SAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,YAAK,OAAO,CAAC,WAAW,MAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;IAChI,IAAM,OAAO,GAAG,UAAG,WAAW,gBAAM,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;IAChE,IAAM,SAAS,GAAa;QAC3B,uBAAgB,OAAO,CAAC,SAAS,IAAI,KAAK,CAAE;QAC5C,wBAAiB,OAAO,CAAC,WAAW,IAAI,KAAK,CAAE;QAC/C,qBAAc,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAE;QAC3C,wBAAiB,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAE;QAC9G,wBAAiB,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,KAAK,CAAE;QACrE,wBAAiB,SAAS,CAAC,WAAW,EAAE,CAAE;QAC1C,oBAAa,WAAW,CAAE;KAC1B,CAAC;IAEF,IAAI,OAAO,CAAC,KAAK,EAAE;QAClB,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC7D;IAED,IAAI,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;QAC1E,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KAC9E;IAED,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;QAC5E,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KAChF;IAED,IAAM,qBAAqB,GAAG,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,qBAAqB,CAAC,MAAM,EAAE;QACzE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;QACnC,qBAAqB,CAAC,OAAO,CAAC,UAAA,GAAG;YAChC,IAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,IAAI,EAAE;gBACb,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACxB;YACD,IAAI,GAAG,CAAC,WAAW,EAAE;gBACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;aAC/B;YACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACjC,QAAQ,CAAC,IAAI,CAAC,UAAG,GAAG,CAAC,IAAI,MAAG,CAAC,CAAC;aAC9B;YACD,IAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YACtE,SAAS,CAAC,IAAI,CAAC,YAAK,OAAO,SAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,cAAO,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;KACH;IAED,IAAI,OAAO,CAAC,WAAW,EAAE;QACxB,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,wBAAiB,OAAO,CAAC,WAAW,CAAE,CAAC,CAAC;KAC3D;IAED,IAAI,OAAO,CAAC,cAAc,EAAE;QAC3B,SAAS,CAAC,IAAI,CAAC,4BAAqB,OAAO,CAAC,cAAc,CAAE,CAAC,CAAC;KAC9D;IAED,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,IAAM,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5G,IAAM,SAAS,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7G,IAAM,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAClE,IAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,IAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnF,OAAO,cAAc,CAAuB;QAC3C,GAAG,EAAE,IAAA,0BAAiB,GAAE;QACxB,UAAU,EAAE,OAAO;QACnB,UAAU,EAAE,SAAS;QACrB,OAAO,SAAA;QACP,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;QAClF,IAAI,MAAA;QACJ,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,CAAC;QAChB,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,SAAS;QACxB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,OAAO,CAAC,QAAQ;QAC3B,WAAW,EAAE,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,SAAS;QAClE,iBAAiB,EAAE,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,SAAS;QACxE,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,kBAAkB,EAAE,OAAO,CAAC,WAAW;QACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,SAAS;QACtB,gBAAgB,EAAE,SAAS;QAC3B,eAAe,EAAE,cAAc;QAC/B,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,qBAAqB;QAClC,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;KACpB,CAAC,CAAC;AACJ,CAAC;AAED,SAAe,yBAAyB,CAAC,UAAwD,EAAE,GAAyB;;;;;;oBACrH,SAAS,GAAG,GAAG,CAAC,aAAa,IAAI,IAAI,IAAI,EAAE,CAAC;oBAC9C,QAAQ,GAAyB,IAAI,CAAC;yBAEtC,GAAG,CAAC,UAAU,EAAd,wBAAc;oBACN,qBAAM,UAAU,CAAC,OAAO,CAAC,EAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAC,CAAC,EAAA;;oBAAjE,QAAQ,GAAG,SAAsD,CAAC;;;yBAG/D,CAAA,CAAC,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAA,EAA3B,wBAA2B;oBACnB,qBAAM,UAAU,CAAC,OAAO,CAAC,EAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAC,CAAC,EAAA;;oBAAjE,QAAQ,GAAG,SAAsD,CAAC;;;yBAG/D,QAAQ,EAAR,wBAAQ;oBACL,SAAS,GAAG,cAAc,CAAgC;wBAC/D,iBAAiB,EAAE,SAAS;wBAC5B,gBAAgB,EAAE,SAAS;wBAC3B,eAAe,EAAE,GAAG,CAAC,eAAe;wBACpC,cAAc,EAAE,GAAG,CAAC,cAAc;wBAClC,WAAW,EAAE,GAAG,CAAC,WAAW;wBAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;wBAC1C,WAAW,EAAE,GAAG,CAAC,WAAW;wBAC5B,SAAS,EAAE,IAAI,IAAI,EAAE;qBACrB,CAAC,CAAC;oBAEH,qBAAM,UAAU,CAAC,SAAS,CAAC,EAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAC,EAAE;4BAC/C,IAAI,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE;4BAC5B,IAAI,EAAE,SAAS;yBACf,CAAC,EAAA;;oBAHF,SAGE,CAAC;oBAEH,sBAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAC;wBAG3C,qBAAM,UAAU,CAAC,SAAS,CAAC,GAAU,CAAC,EAAA;;oBAAtC,SAAsC,CAAC;oBACvC,sBAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAA,EAAE,EAAC;;;;CACjC;AAED,SAAS,wBAAwB,CAAC,OAAe,EAAE,IAAY;IAC9D,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAG,OAAO,IAAI,EAAE,eAAK,IAAI,IAAI,EAAE,CAAE,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAe,EAAE,IAAY;IAChE,IAAM,iBAAiB,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAM,cAAc,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAG,iBAAiB,eAAK,cAAc,CAAE,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAa;IACjD,IAAI,CAAC,KAAK,EAAE;QACX,OAAO,EAAE,CAAC;KACV;IAED,IAAM,UAAU,GAAG,KAAK;SACtB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,WAAW,EAAE;SACb,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;SAC/B,OAAO,CAAC,sBAAsB,EAAE,GAAG,CAAC;SACpC,OAAO,CAAC,2FAA2F,EAAE,YAAY,CAAC;SAClH,OAAO,CAAC,iCAAiC,EAAE,QAAQ,CAAC;SACpD,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;SACzB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,IAAI,EAAE,EAAX,CAAW,CAAC;SACxB,MAAM,CAAC,OAAO,CAAC;SACf,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC1E,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAY;IAChD,IAAI,CAAC,IAAI,EAAE;QACV,OAAO,EAAE,CAAC;KACV;IAED,IAAM,iBAAiB,GAAG,IAAI;SAC5B,OAAO,CAAC,yBAAyB,EAAE,aAAa,CAAC;SACjD,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,8BAA8B,EAAE,cAAc,CAAC;SACvD,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC;SAClC,OAAO,CAAC,qBAAqB,EAAE,cAAc,CAAC;SAC9C,OAAO,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;IAEzD,OAAO,2BAA2B,CAAC,iBAAiB,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CAAgC,GAAM;IAC5D,IAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;QACjC,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SACxB;IACF,CAAC,CAAC,CAAC;IACH,OAAO,OAAY,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK,EAAE;QACX,OAAO,IAAI,IAAI,EAAE,CAAC;KAClB;IAED,IAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/D,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAkC,EAAE,MAAc;IAC5F,IAAI,UAAU,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAC,IAAI,UAAU,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;QAC7G,OAAO,IAAI,CAAC;KACZ;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,GAAY;IAC/B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QACpC,OAAO,KAAK,CAAC;KACb;IAED,IAAI;QACH,IAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;KAC1D;IACD,WAAM;QACL,OAAO,uCAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACzD;AACF,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAmB;IACjD,IAAI,CAAC,UAAU,EAAE;QAChB,OAAO,KAAK,CAAC;KACb;IAED,OAAO,UAAU,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC;AACjD,CAAC;AAED,SAAS,aAAa,CAAC,KAAU;IAChC,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC","file":"error-reporter.js","sourcesContent":["import { createHash } from 'crypto';\nimport { ErrorAutoFixLogs } from '../collections/error-auto-fix.collection';\nimport { MongoManagerCollection } from '../managers/mongo.manager';\nimport { ErrorAutoFixLogModel } from '../models/error-auto-fix-log.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from './common';\n\nconst DEFAULT_ERROR_API_URL = 'https://backend.resolveio.com/api/errors/report';\nconst LOCAL_HOSTNAMES = new Set(['localhost', '127.0.0.1', '0.0.0.0', '::1']);\n\ntype LoggerLike = Pick<typeof console, 'error' | 'warn' | 'info' | 'log'>;\n// eslint-disable-next-line no-unused-vars\ntype ResolveIoInsertOverride = (payload: ErrorReportPayload, logger: LoggerLike) => Promise<ErrorReportResult>;\nlet resolveIoInsertOverride: ResolveIoInsertOverride | null = null;\n\nexport function __setResolveIoInsertOverrideForTesting(fn: ResolveIoInsertOverride | null) {\n\tresolveIoInsertOverride = fn;\n}\n\n// eslint-disable-next-line no-unused-vars\ntype FetchLike = (input: RequestInfo, init?: RequestInit) => Promise<Response>;\n\nexport interface ErrorReportAttachment {\n\tname: string;\n\turl?: string;\n\tcontentType?: string;\n\tsize?: number;\n}\n\nexport interface ErrorReportOptions {\n\tsourceApp?: string;\n\tmessage?: string;\n\tsubject?: string;\n\tenvironment?: string;\n\tclientId?: string;\n\tclientSlug?: string;\n\tclientName?: string;\n\tclientRepo?: string;\n\tclientEmail?: string;\n\tseverity?: string;\n\tstack?: string | Error;\n\terror?: unknown;\n\tcontext?: Record<string, any> | string | null;\n\tmetadata?: Record<string, any> | string | null;\n\tattachments?: ErrorReportAttachment[];\n\tfingerprint?: string;\n\tidempotencyKey?: string;\n\treportedBy?: string;\n\treportedAt?: string | Date;\n\treportedFor?: string;\n\treportedCount?: number;\n\treportedSourceHost?: string;\n\treportedSourceIp?: string;\n\treportedSourceVersion?: string;\n\treportedSourcePid?: number;\n\treportedSourceInstance?: string;\n\treportedSourceRegion?: string;\n\treportedSourceCluster?: string;\n\treportedSourceProcess?: string;\n\treportedSourceEnv?: Record<string, any>;\n\tcorrelationId?: string;\n\tapiUrl?: string;\n\tfetch?: FetchLike;\n\tlogger?: Pick<typeof console, 'error' | 'warn' | 'info' | 'log'>;\n}\n\nexport interface ErrorReportResult {\n\tdelivered: boolean;\n\tstatus?: number;\n\treason?: string;\n}\n\ninterface ErrorReportPayload {\n\tsourceApp: string;\n\tmessage: string;\n\tenvironment?: string;\n\tclientId?: string;\n\tclientSlug?: string;\n\tclientName?: string;\n\tclientRepo?: string;\n\tclientEmail?: string;\n\tseverity: string;\n\tstack?: string;\n\tcontext?: Record<string, any> | string;\n\tmetadata?: Record<string, any> | string;\n\tattachments?: ErrorReportAttachment[];\n\tfingerprint?: string;\n\tidempotencyKey?: string;\n\treportedBy?: string;\n\treportedAt?: string;\n\treportedFor?: string;\n\treportedCount?: number;\n\treportedSourceHost?: string;\n\treportedSourceIp?: string;\n\treportedSourceVersion?: string;\n\treportedSourcePid?: number;\n\treportedSourceInstance?: string;\n\treportedSourceRegion?: string;\n\treportedSourceCluster?: string;\n\treportedSourceProcess?: string;\n\treportedSourceEnv?: Record<string, any>;\n}\n\nexport class ErrorReporter {\n\tpublic static async report(options: ErrorReportOptions): Promise<ErrorReportResult> {\n\t\tconst logger = options.logger || console;\n\t\tconst config = getServerConfig();\n\t\tconst normalizedApiUrl = options.apiUrl || DEFAULT_ERROR_API_URL;\n\t\tconst clientName = options.clientName || config?.CLIENT_NAME || ResolveIOServer.getClientName?.() || 'resolveio';\n\t\tconst sourceApp = options.sourceApp || clientName || 'resolveio-server-lib';\n\t\tconst environment = options.environment || process.env.RESOLVEIO_ENV || config?.RESOLVEIO_ENV || config?.ENVIRONMENT || config?.ROOT_URL || process.env.NODE_ENV || 'unknown';\n\t\tconst message = options.message || options.subject || 'ResolveIO Error Detected';\n\t\tconst severity = options.severity || 'error';\n\t\tconst stack = normalizeStack(options.stack || options.error);\n\t\tconst context = normalizeStructured(options.context, options.correlationId);\n\t\tconst metadata = normalizeStructured(mergeMetadata(options.metadata, options.correlationId));\n\t\tconst attachments = Array.isArray(options.attachments) ? normalizeAttachments(options.attachments) : undefined;\n\t\tconst fingerprint = options.fingerprint || computeFingerprint(sourceApp, environment, message, stack);\n\t\tconst idempotencyKey = options.idempotencyKey;\n\t\tconst reportedAt = normalizeReportedAt(options.reportedAt);\n\t\tconst normalizedReportedSourceEnv = normalizeStructured(options.reportedSourceEnv);\n\t\tconst payload: ErrorReportPayload = removeEmptyFields({\n\t\t\tsourceApp,\n\t\t\tmessage,\n\t\t\tenvironment,\n\t\t\tclientId: options.clientId,\n\t\t\tclientSlug: options.clientSlug,\n\t\t\tclientName,\n\t\t\tclientRepo: options.clientRepo,\n\t\t\tclientEmail: options.clientEmail,\n\t\t\tseverity,\n\t\t\tstack,\n\t\t\tcontext,\n\t\t\tmetadata,\n\t\t\tattachments,\n\t\t\tfingerprint,\n\t\t\tidempotencyKey,\n\t\t\treportedBy: options.reportedBy,\n\t\t\treportedAt,\n\t\t\treportedFor: options.reportedFor,\n\t\t\treportedCount: options.reportedCount,\n\t\t\treportedSourceHost: options.reportedSourceHost,\n\t\t\treportedSourceIp: options.reportedSourceIp,\n\t\t\treportedSourceVersion: options.reportedSourceVersion,\n\t\t\treportedSourcePid: options.reportedSourcePid,\n\t\t\treportedSourceInstance: options.reportedSourceInstance,\n\t\t\treportedSourceRegion: options.reportedSourceRegion,\n\t\t\treportedSourceCluster: options.reportedSourceCluster,\n\t\t\treportedSourceProcess: options.reportedSourceProcess,\n\t\t\treportedSourceEnv: typeof normalizedReportedSourceEnv === 'string' ? undefined : normalizedReportedSourceEnv as Record<string, any>\n\t\t});\n\n\t\tif (shouldSuppressForLocalEnvironment(config, normalizedApiUrl)) {\n\t\t\tlogger.info('ErrorReporter suppressed: local environment detected');\n\t\t\tlogger.error('ErrorReporter payload (suppressed):', payload);\n\t\t\treturn { delivered: false, reason: 'local-environment' };\n\t\t}\n\n\t\tif (isResolveIOSelfClient(clientName)) {\n\t\t\treturn await handleResolveIoSelfReport(payload, logger);\n\t\t}\n\n\t\tconst transport = options.fetch || globalThis.fetch;\n\t\tif (typeof transport !== 'function') {\n\t\t\tlogger.error('ErrorReporter failed: fetch is not available in this runtime');\n\t\t\tlogger.error('ErrorReporter payload (not sent):', payload);\n\t\t\treturn { delivered: false, reason: 'missing-fetch' };\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await transport(normalizedApiUrl, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: removeEmptyFields({\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t'X-ResolveIO-Error-Key': clientName,\n\t\t\t\t\t'X-ResolveIO-Error-Hash': fingerprint,\n\t\t\t\t\t'X-ResolveIO-Idempotency-Key': idempotencyKey\n\t\t\t\t}),\n\t\t\t\tbody: JSON.stringify(payload)\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tlogger.error('ErrorReporter failed to deliver payload', { status: response.status, statusText: response.statusText });\n\t\t\t\treturn { delivered: false, status: response.status, reason: 'http-error' };\n\t\t\t}\n\n\t\t\treturn { delivered: true, status: response.status };\n\t\t}\n\t\tcatch (err) {\n\t\t\tlogger.error('ErrorReporter exception while delivering payload', err);\n\t\t\tlogger.error('ErrorReporter payload (not sent):', payload);\n\t\t\treturn { delivered: false, reason: 'network-error' };\n\t\t}\n\t}\n}\n\nfunction getServerConfig(): Record<string, any> | null {\n\ttry {\n\t\treturn ResolveIOServer.getServerConfig?.() || null;\n\t}\n\tcatch (err) {\n\t\tconsole.error('Failed to read ResolveIO server config', err);\n\t\treturn null;\n\t}\n}\n\nfunction normalizeStack(stack?: string | Error | unknown): string | undefined {\n\tif (!stack) {\n\t\treturn undefined;\n\t}\n\n\tif (typeof stack === 'string') {\n\t\treturn stack;\n\t}\n\n\tif (stack instanceof Error) {\n\t\treturn stack.stack || stack.message;\n\t}\n\n\tif (typeof stack === 'object' && stack !== null && typeof (stack as Record<string, any>).stack === 'string') {\n\t\treturn (stack as Record<string, any>).stack;\n\t}\n\n\tif (typeof stack === 'object' && stack !== null && typeof (stack as Record<string, any>).message === 'string') {\n\t\treturn (stack as Record<string, any>).message;\n\t}\n\n\treturn JSON.stringify(stack);\n}\n\nfunction normalizeStructured(value: any, correlationId?: string): Record<string, any> | string | undefined {\n\tif (value === null || value === undefined) {\n\t\treturn undefined;\n\t}\n\n\tif (typeof value === 'string') {\n\t\treturn value;\n\t}\n\n\tconst serialized = serializeValue(value);\n\tif (correlationId && typeof serialized === 'object' && serialized !== null && !serialized.correlationId) {\n\t\tserialized.correlationId = correlationId;\n\t}\n\treturn serialized;\n}\n\nfunction serializeValue(value: any, seen: WeakSet<object> = new WeakSet()): any {\n\tif (value === null || value === undefined) {\n\t\treturn value;\n\t}\n\n\tif (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n\t\treturn value;\n\t}\n\n\tif (typeof value === 'bigint') {\n\t\treturn value.toString();\n\t}\n\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\n\tif (value instanceof Error) {\n\t\tconst base = {\n\t\t\tname: value.name,\n\t\t\tmessage: value.message,\n\t\t\tstack: value.stack\n\t\t};\n\t\treturn Object.assign({}, base, serializeValue(Object.assign({}, value), seen));\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tif (seen.has(value)) {\n\t\t\treturn '[Circular]';\n\t\t}\n\t\tseen.add(value);\n\t\tconst arr = value.map(item => serializeValue(item, seen));\n\t\tseen.delete(value);\n\t\treturn arr;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tif (seen.has(value)) {\n\t\t\treturn '[Circular]';\n\t\t}\n\t\tseen.add(value);\n\t\tconst obj: Record<string, any> = {};\n\t\tfor (const [key, val] of Object.entries(value)) {\n\t\t\tobj[key] = serializeValue(val, seen);\n\t\t}\n\t\tseen.delete(value);\n\t\treturn obj;\n\t}\n\n\treturn String(value);\n}\n\nfunction normalizeAttachments(attachments: ErrorReportAttachment[]): ErrorReportAttachment[] {\n\treturn attachments\n\t\t.filter(att => !!att && typeof att === 'object')\n\t\t.map(att => removeEmptyFields({\n\t\t\tname: att.name,\n\t\t\turl: att.url,\n\t\t\tcontentType: att.contentType,\n\t\t\tsize: typeof att.size === 'number' ? att.size : undefined\n\t\t}))\n\t\t.filter(att => !!att.name);\n}\n\nfunction normalizeReportedAt(value?: string | Date): string | undefined {\n\tif (!value) {\n\t\treturn new Date().toISOString();\n\t}\n\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\n\tconst date = new Date(value);\n\tif (!isNaN(date.getTime())) {\n\t\treturn date.toISOString();\n\t}\n\n\treturn new Date().toISOString();\n}\n\nfunction computeFingerprint(sourceApp: string, environment: string | undefined, message: string, stack?: string): string | undefined {\n\tconst signature = `${sourceApp || ''}:${environment || ''}:${message || ''}:${stack ? stack.split('\\n').slice(0, 5).join('|') : ''}`;\n\treturn createHash('sha256').update(signature).digest('hex');\n}\n\nfunction removeEmptyFields<T extends Record<string, any>>(obj: T): T {\n\tconst cleaned: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(obj || {})) {\n\t\tif (value === undefined || value === null || value === '') {\n\t\t\tcontinue;\n\t\t}\n\t\tcleaned[key] = value;\n\t}\n\treturn cleaned as T;\n}\n\nfunction mergeMetadata(metadata: Record<string, any> | string | null | undefined, correlationId?: string) {\n\tif (!metadata && !correlationId) {\n\t\treturn undefined;\n\t}\n\n\tconst base = metadata ? normalizeStructured(metadata) : undefined;\n\tif (!correlationId) {\n\t\treturn base;\n\t}\n\n\tif (typeof base === 'string') {\n\t\treturn {\n\t\t\tcorrelationId,\n\t\t\tmessage: base\n\t\t};\n\t}\n\n\tconst metadataObj = (base || {}) as Record<string, any>;\n\tif (!metadataObj.correlationId) {\n\t\tmetadataObj.correlationId = correlationId;\n\t}\n\treturn metadataObj;\n}\n\nasync function handleResolveIoSelfReport(payload: ErrorReportPayload, logger: LoggerLike): Promise<ErrorReportResult> {\n\tif (resolveIoInsertOverride) {\n\t\treturn await resolveIoInsertOverride(payload, logger);\n\t}\n\n\tif (!ErrorAutoFixLogs) {\n\t\tlogger.warn('ErrorReporter ResolveIO insert skipped: error-autofix collection unavailable');\n\t\tlogger.error('ErrorReporter payload (not inserted):', payload);\n\t\treturn { delivered: false, reason: 'resolveio-no-collection' };\n\t}\n\n\ttry {\n\t\tconst doc = buildResolveIoAutoFixDoc(payload);\n\t\tconst upsertResult = await upsertResolveIoAutoFixLog(ErrorAutoFixLogs, doc);\n\t\treturn {\n\t\t\tdelivered: true,\n\t\t\treason: upsertResult.duplicate ? 'resolveio-duplicate' : 'resolveio-insert'\n\t\t};\n\t}\n\tcatch (err) {\n\t\tlogger.error('ErrorReporter failed to insert resolveio auto-fix log', err);\n\t\tlogger.error('ErrorReporter payload (not inserted):', payload);\n\t\treturn { delivered: false, reason: 'resolveio-insert-failed' };\n\t}\n}\n\nfunction buildResolveIoAutoFixDoc(payload: ErrorReportPayload): ErrorAutoFixLogModel {\n\tconst timestamp = coerceReportedDate(payload.reportedAt);\n\tconst safeMessage = (payload.message || '').toString().trim() || 'Unknown error';\n\tconst subjectBase = `[AppError] ${payload.sourceApp || 'application'}${payload.environment ? ` (${payload.environment})` : ''}`;\n\tconst subject = `${subjectBase} - ${safeMessage.slice(0, 120)}`;\n\tconst bodyLines: string[] = [\n\t\t`Source App:\\t${payload.sourceApp || 'n/a'}`,\n\t\t`Environment:\\t${payload.environment || 'n/a'}`,\n\t\t`Severity:\\t${payload.severity || 'error'}`,\n\t\t`Client Hint:\\t${payload.clientName || payload.clientSlug || payload.clientRepo || payload.clientId || 'n/a'}`,\n\t\t`Reported By:\\t${payload.reportedBy || payload.clientEmail || 'n/a'}`,\n\t\t`Reported At:\\t${timestamp.toISOString()}`,\n\t\t`Message:\\t${safeMessage}`\n\t];\n\n\tif (payload.stack) {\n\t\tbodyLines.push('', 'Stack Trace:', payload.stack.toString());\n\t}\n\n\tif (isPlainObject(payload.context) && Object.keys(payload.context).length) {\n\t\tbodyLines.push('', 'Context JSON:', JSON.stringify(payload.context, null, 2));\n\t}\n\n\tif (isPlainObject(payload.metadata) && Object.keys(payload.metadata).length) {\n\t\tbodyLines.push('', 'Metadata JSON:', JSON.stringify(payload.metadata, null, 2));\n\t}\n\n\tconst normalizedAttachments = normalizeAttachments(payload.attachments);\n\tif (Array.isArray(normalizedAttachments) && normalizedAttachments.length) {\n\t\tbodyLines.push('', 'Attachments:');\n\t\tnormalizedAttachments.forEach(att => {\n\t\t\tconst segments: string[] = [];\n\t\t\tif (att.name) {\n\t\t\t\tsegments.push(att.name);\n\t\t\t}\n\t\t\tif (att.contentType) {\n\t\t\t\tsegments.push(att.contentType);\n\t\t\t}\n\t\t\tif (typeof att.size === 'number') {\n\t\t\t\tsegments.push(`${att.size}b`);\n\t\t\t}\n\t\t\tconst summary = segments.length ? segments.join(' | ') : 'attachment';\n\t\t\tbodyLines.push(`- ${summary}${att.url ? ` -> ${att.url}` : ''}`);\n\t\t});\n\t}\n\n\tif (payload.fingerprint) {\n\t\tbodyLines.push('', `Fingerprint:\\t${payload.fingerprint}`);\n\t}\n\n\tif (payload.idempotencyKey) {\n\t\tbodyLines.push(`Idempotency Key:\\t${payload.idempotencyKey}`);\n\t}\n\n\tconst body = bodyLines.join('\\n');\n\tconst rawHash = (payload.idempotencyKey || '').toString().trim() || generateResolveIoRawHash(subject, body);\n\tconst issueHash = (payload.fingerprint || '').toString().trim() || generateResolveIoIssueHash(subject, body);\n\tconst fromEmail = payload.reportedBy || payload.clientEmail || '';\n\tconst reportMetadata = isPlainObject(payload.metadata) ? payload.metadata : undefined;\n\tconst reportContext = isPlainObject(payload.context) ? payload.context : undefined;\n\n\treturn cleanUndefined<ErrorAutoFixLogModel>({\n\t\t_id: objectIdHexString(),\n\t\temail_hash: rawHash,\n\t\tissue_hash: issueHash,\n\t\tsubject,\n\t\tmessage_id: payload.idempotencyKey ? payload.idempotencyKey.toString() : undefined,\n\t\tbody,\n\t\tstatus: 'pending',\n\t\tignored: false,\n\t\tattempt_count: 0,\n\t\tduplicate_count: 0,\n\t\tfirst_seen_at: timestamp,\n\t\tfrom_email: fromEmail,\n\t\tid_client: payload.clientId,\n\t\tclient_name: payload.clientName || payload.clientSlug || undefined,\n\t\tcodex_environment: payload.clientRepo || payload.clientSlug || undefined,\n\t\tsource_app: payload.sourceApp,\n\t\tsource_environment: payload.environment,\n\t\tseverity: payload.severity,\n\t\treported_by: fromEmail,\n\t\tlast_reported_at: timestamp,\n\t\treport_metadata: reportMetadata,\n\t\treport_context: reportContext,\n\t\tattachments: normalizedAttachments,\n\t\tcreatedAt: timestamp,\n\t\tupdatedAt: timestamp\n\t});\n}\n\nasync function upsertResolveIoAutoFixLog(collection: MongoManagerCollection<ErrorAutoFixLogModel>, doc: ErrorAutoFixLogModel): Promise<{ duplicate: boolean, doc: ErrorAutoFixLogModel }> {\n\tconst timestamp = doc.first_seen_at || new Date();\n\tlet existing: ErrorAutoFixLogModel = null;\n\n\tif (doc.issue_hash) {\n\t\texisting = await collection.findOne({issue_hash: doc.issue_hash});\n\t}\n\n\tif (!existing && doc.email_hash) {\n\t\texisting = await collection.findOne({email_hash: doc.email_hash});\n\t}\n\n\tif (existing) {\n\t\tconst updateSet = cleanUndefined<Partial<ErrorAutoFixLogModel>>({\n\t\t\tlast_duplicate_at: timestamp,\n\t\t\tlast_reported_at: timestamp,\n\t\t\treport_metadata: doc.report_metadata,\n\t\t\treport_context: doc.report_context,\n\t\t\tattachments: doc.attachments,\n\t\t\tseverity: doc.severity,\n\t\t\tsource_app: doc.source_app,\n\t\t\tsource_environment: doc.source_environment,\n\t\t\treported_by: doc.reported_by,\n\t\t\tupdatedAt: new Date()\n\t\t});\n\n\t\tawait collection.updateOne({_id: existing._id}, {\n\t\t\t$inc: { duplicate_count: 1 },\n\t\t\t$set: updateSet\n\t\t});\n\n\t\treturn { duplicate: true, doc: existing };\n\t}\n\n\tawait collection.insertOne(doc as any);\n\treturn { duplicate: false, doc };\n}\n\nfunction generateResolveIoRawHash(subject: string, body: string): string {\n\treturn createHash('sha256').update(`${subject || ''}\\n${body || ''}`, 'utf8').digest('hex');\n}\n\nfunction generateResolveIoIssueHash(subject: string, body: string): string {\n\tconst normalizedSubject = normalizeTextForAutoFixHash(subject);\n\tconst normalizedBody = normalizeBodyForAutoFixHash(body);\n\treturn createHash('sha256').update(`${normalizedSubject}\\n${normalizedBody}`, 'utf8').digest('hex');\n}\n\nfunction normalizeTextForAutoFixHash(value: string): string {\n\tif (!value) {\n\t\treturn '';\n\t}\n\n\tconst normalized = value\n\t\t.replace(/\\r/g, '\\n')\n\t\t.toLowerCase()\n\t\t.replace(/0x[0-9a-f]+/gi, '0x#')\n\t\t.replace(/\\b[0-9a-f]{7,64}\\b/gi, '#')\n\t\t.replace(/\\b[0-9]{4}[-/][0-9]{2}[-/][0-9]{2}(?:[ t][0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]{1,6})?)?\\b/g, '#datetime#')\n\t\t.replace(/\\b[0-9]{2}:[0-9]{2}:[0-9]{2}\\b/g, '#time#')\n\t\t.replace(/[0-9]+/g, '#')\n\t\t.replace(/[^\\S\\n]+/g, ' ')\n\t\t.split('\\n')\n\t\t.map(line => line.trim())\n\t\t.filter(Boolean)\n\t\t.slice(0, 60)\n\t\t.join('\\n');\n\n\treturn normalized.length > 4000 ? normalized.slice(0, 4000) : normalized;\n}\n\nfunction normalizeBodyForAutoFixHash(body: string): string {\n\tif (!body) {\n\t\treturn '';\n\t}\n\n\tconst withoutStackNoise = body\n\t\t.replace(/=+\\s*stack trace\\s*=+/gi, 'stack trace')\n\t\t.replace(/-{3,}/g, '-')\n\t\t.replace(/\\[[^\\]]*request id[^\\]]*\\]/gi, '[request id]')\n\t\t.replace(/guid:[^\\s]+/gi, 'guid:#')\n\t\t.replace(/request id:[^\\s]+/gi, 'request id:#')\n\t\t.replace(/correlation id:[^\\s]+/gi, 'correlation id:#');\n\n\treturn normalizeTextForAutoFixHash(withoutStackNoise);\n}\n\nfunction cleanUndefined<T extends Record<string, any>>(obj: T): T {\n\tconst cleaned: Record<string, any> = {};\n\tObject.keys(obj || {}).forEach(key => {\n\t\tif (typeof obj[key] !== 'undefined') {\n\t\t\tcleaned[key] = obj[key];\n\t\t}\n\t});\n\treturn cleaned as T;\n}\n\nfunction coerceReportedDate(value?: string): Date {\n\tif (!value) {\n\t\treturn new Date();\n\t}\n\n\tconst coerced = new Date(value);\n\treturn Number.isNaN(coerced.getTime()) ? new Date() : coerced;\n}\n\nfunction shouldSuppressForLocalEnvironment(config: Record<string, any> | null, apiUrl: string): boolean {\n\tif (isLocalUrl(config?.ROOT_URL) || isLocalUrl(config?.SERVER_URL) || process.env.NODE_ENV === 'development') {\n\t\treturn true;\n\t}\n\n\treturn isLocalUrl(apiUrl);\n}\n\nfunction isLocalUrl(url?: string): boolean {\n\tif (!url || typeof url !== 'string') {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst parsed = new URL(url);\n\t\treturn LOCAL_HOSTNAMES.has(parsed.hostname.toLowerCase());\n\t}\n\tcatch {\n\t\treturn /localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0|::1/.test(url);\n\t}\n}\n\nfunction isResolveIOSelfClient(clientName?: string): boolean {\n\tif (!clientName) {\n\t\treturn false;\n\t}\n\n\treturn clientName.toLowerCase() === 'resolveio';\n}\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n\treturn !!value && typeof value === 'object' && !Array.isArray(value);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/util/error-reporter.ts"],"names":[],"mappings":"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","file":"error-reporter.js","sourcesContent":["import { createHash } from 'crypto';\nimport { ResolveIOServer } from '../resolveio-server-app';\n\nconst DEFAULT_ERROR_API_URL = 'https://backend.resolveio.com/api/errors/report';\nconst LOCAL_HOSTNAMES = new Set(['localhost', '127.0.0.1', '0.0.0.0', '::1']);\n\n// eslint-disable-next-line no-unused-vars\ntype FetchLike = (input: RequestInfo, init?: RequestInit) => Promise<Response>;\n\nexport interface ErrorReportAttachment {\n\tname: string;\n\turl?: string;\n\tcontentType?: string;\n\tsize?: number;\n}\n\nexport interface ErrorReportOptions {\n\tsourceApp?: string;\n\tmessage?: string;\n\tsubject?: string;\n\tenvironment?: string;\n\tclientId?: string;\n\tclientSlug?: string;\n\tclientName?: string;\n\tclientRepo?: string;\n\tclientEmail?: string;\n\tseverity?: string;\n\tstack?: string | Error;\n\terror?: unknown;\n\tcontext?: Record<string, any> | string | null;\n\tmetadata?: Record<string, any> | string | null;\n\tattachments?: ErrorReportAttachment[];\n\tfingerprint?: string;\n\tidempotencyKey?: string;\n\treportedBy?: string;\n\treportedAt?: string | Date;\n\treportedFor?: string;\n\treportedCount?: number;\n\treportedSourceHost?: string;\n\treportedSourceIp?: string;\n\treportedSourceVersion?: string;\n\treportedSourcePid?: number;\n\treportedSourceInstance?: string;\n\treportedSourceRegion?: string;\n\treportedSourceCluster?: string;\n\treportedSourceProcess?: string;\n\treportedSourceEnv?: Record<string, any>;\n\tcorrelationId?: string;\n\tapiUrl?: string;\n\tfetch?: FetchLike;\n\tlogger?: Pick<typeof console, 'error' | 'warn' | 'info' | 'log'>;\n}\n\nexport interface ErrorReportResult {\n\tdelivered: boolean;\n\tstatus?: number;\n\treason?: string;\n}\n\ninterface ErrorReportPayload {\n\tsourceApp: string;\n\tmessage: string;\n\tenvironment?: string;\n\tclientId?: string;\n\tclientSlug?: string;\n\tclientName?: string;\n\tclientRepo?: string;\n\tclientEmail?: string;\n\tseverity: string;\n\tstack?: string;\n\tcontext?: Record<string, any> | string;\n\tmetadata?: Record<string, any> | string;\n\tattachments?: ErrorReportAttachment[];\n\tfingerprint?: string;\n\tidempotencyKey?: string;\n\treportedBy?: string;\n\treportedAt?: string;\n\treportedFor?: string;\n\treportedCount?: number;\n\treportedSourceHost?: string;\n\treportedSourceIp?: string;\n\treportedSourceVersion?: string;\n\treportedSourcePid?: number;\n\treportedSourceInstance?: string;\n\treportedSourceRegion?: string;\n\treportedSourceCluster?: string;\n\treportedSourceProcess?: string;\n\treportedSourceEnv?: Record<string, any>;\n}\n\nexport class ErrorReporter {\n\tpublic static async report(options: ErrorReportOptions): Promise<ErrorReportResult> {\n\t\tconst logger = options.logger || console;\n\t\tconst config = getServerConfig();\n\t\tconst normalizedApiUrl = options.apiUrl || DEFAULT_ERROR_API_URL;\n\t\tconst clientName = options.clientName || config?.CLIENT_NAME || ResolveIOServer.getClientName?.() || 'resolveio';\n\t\tconst sourceApp = options.sourceApp || clientName || 'resolveio-server-lib';\n\t\tconst environment = options.environment || process.env.RESOLVEIO_ENV || config?.RESOLVEIO_ENV || config?.ENVIRONMENT || config?.ROOT_URL || process.env.NODE_ENV || 'unknown';\n\t\tconst message = options.message || options.subject || 'ResolveIO Error Detected';\n\t\tconst severity = options.severity || 'error';\n\t\tconst stack = normalizeStack(options.stack || options.error);\n\t\tconst context = normalizeStructured(options.context, options.correlationId);\n\t\tconst metadata = normalizeStructured(mergeMetadata(options.metadata, options.correlationId));\n\t\tconst attachments = Array.isArray(options.attachments) ? normalizeAttachments(options.attachments) : undefined;\n\t\tconst fingerprint = options.fingerprint || computeFingerprint(sourceApp, environment, message, stack);\n\t\tconst idempotencyKey = options.idempotencyKey;\n\t\tconst reportedAt = normalizeReportedAt(options.reportedAt);\n\t\tconst normalizedReportedSourceEnv = normalizeStructured(options.reportedSourceEnv);\n\t\tconst payload: ErrorReportPayload = removeEmptyFields({\n\t\t\tsourceApp,\n\t\t\tmessage,\n\t\t\tenvironment,\n\t\t\tclientId: options.clientId,\n\t\t\tclientSlug: options.clientSlug,\n\t\t\tclientName,\n\t\t\tclientRepo: options.clientRepo,\n\t\t\tclientEmail: options.clientEmail,\n\t\t\tseverity,\n\t\t\tstack,\n\t\t\tcontext,\n\t\t\tmetadata,\n\t\t\tattachments,\n\t\t\tfingerprint,\n\t\t\tidempotencyKey,\n\t\t\treportedBy: options.reportedBy,\n\t\t\treportedAt,\n\t\t\treportedFor: options.reportedFor,\n\t\t\treportedCount: options.reportedCount,\n\t\t\treportedSourceHost: options.reportedSourceHost,\n\t\t\treportedSourceIp: options.reportedSourceIp,\n\t\t\treportedSourceVersion: options.reportedSourceVersion,\n\t\t\treportedSourcePid: options.reportedSourcePid,\n\t\t\treportedSourceInstance: options.reportedSourceInstance,\n\t\t\treportedSourceRegion: options.reportedSourceRegion,\n\t\t\treportedSourceCluster: options.reportedSourceCluster,\n\t\t\treportedSourceProcess: options.reportedSourceProcess,\n\t\t\treportedSourceEnv: typeof normalizedReportedSourceEnv === 'string' ? undefined : normalizedReportedSourceEnv as Record<string, any>\n\t\t});\n\n\t\tif (shouldSuppressForLocalEnvironment(config, normalizedApiUrl)) {\n\t\t\tlogger.info('ErrorReporter suppressed: local environment detected');\n\t\t\tlogger.error('ErrorReporter payload (suppressed):', payload);\n\t\t\treturn { delivered: false, reason: 'local-environment' };\n\t\t}\n\n\t\tconst transport = options.fetch || globalThis.fetch;\n\t\tif (typeof transport !== 'function') {\n\t\t\tlogger.error('ErrorReporter failed: fetch is not available in this runtime');\n\t\t\tlogger.error('ErrorReporter payload (not sent):', payload);\n\t\t\treturn { delivered: false, reason: 'missing-fetch' };\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await transport(normalizedApiUrl, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: removeEmptyFields({\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t'X-ResolveIO-Error-Key': clientName,\n\t\t\t\t\t'X-ResolveIO-Error-Hash': fingerprint,\n\t\t\t\t\t'X-ResolveIO-Idempotency-Key': idempotencyKey\n\t\t\t\t}),\n\t\t\t\tbody: JSON.stringify(payload)\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tlogger.error('ErrorReporter failed to deliver payload', { status: response.status, statusText: response.statusText });\n\t\t\t\treturn { delivered: false, status: response.status, reason: 'http-error' };\n\t\t\t}\n\n\t\t\treturn { delivered: true, status: response.status };\n\t\t}\n\t\tcatch (err) {\n\t\t\tlogger.error('ErrorReporter exception while delivering payload', err);\n\t\t\tlogger.error('ErrorReporter payload (not sent):', payload);\n\t\t\treturn { delivered: false, reason: 'network-error' };\n\t\t}\n\t}\n}\n\nfunction getServerConfig(): Record<string, any> | null {\n\ttry {\n\t\treturn ResolveIOServer.getServerConfig?.() || null;\n\t}\n\tcatch (err) {\n\t\tconsole.error('Failed to read ResolveIO server config', err);\n\t\treturn null;\n\t}\n}\n\nfunction normalizeStack(stack?: string | Error | unknown): string | undefined {\n\tif (!stack) {\n\t\treturn undefined;\n\t}\n\n\tif (typeof stack === 'string') {\n\t\treturn stack;\n\t}\n\n\tif (stack instanceof Error) {\n\t\treturn stack.stack || stack.message;\n\t}\n\n\tif (typeof stack === 'object' && stack !== null && typeof (stack as Record<string, any>).stack === 'string') {\n\t\treturn (stack as Record<string, any>).stack;\n\t}\n\n\tif (typeof stack === 'object' && stack !== null && typeof (stack as Record<string, any>).message === 'string') {\n\t\treturn (stack as Record<string, any>).message;\n\t}\n\n\treturn JSON.stringify(stack);\n}\n\nfunction normalizeStructured(value: any, correlationId?: string): Record<string, any> | string | undefined {\n\tif (value === null || value === undefined) {\n\t\treturn undefined;\n\t}\n\n\tif (typeof value === 'string') {\n\t\treturn value;\n\t}\n\n\tconst serialized = serializeValue(value);\n\tif (correlationId && typeof serialized === 'object' && serialized !== null && !serialized.correlationId) {\n\t\tserialized.correlationId = correlationId;\n\t}\n\treturn serialized;\n}\n\nfunction serializeValue(value: any, seen: WeakSet<object> = new WeakSet()): any {\n\tif (value === null || value === undefined) {\n\t\treturn value;\n\t}\n\n\tif (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n\t\treturn value;\n\t}\n\n\tif (typeof value === 'bigint') {\n\t\treturn value.toString();\n\t}\n\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\n\tif (value instanceof Error) {\n\t\tconst base = {\n\t\t\tname: value.name,\n\t\t\tmessage: value.message,\n\t\t\tstack: value.stack\n\t\t};\n\t\treturn Object.assign({}, base, serializeValue(Object.assign({}, value), seen));\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tif (seen.has(value)) {\n\t\t\treturn '[Circular]';\n\t\t}\n\t\tseen.add(value);\n\t\tconst arr = value.map(item => serializeValue(item, seen));\n\t\tseen.delete(value);\n\t\treturn arr;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tif (seen.has(value)) {\n\t\t\treturn '[Circular]';\n\t\t}\n\t\tseen.add(value);\n\t\tconst obj: Record<string, any> = {};\n\t\tfor (const [key, val] of Object.entries(value)) {\n\t\t\tobj[key] = serializeValue(val, seen);\n\t\t}\n\t\tseen.delete(value);\n\t\treturn obj;\n\t}\n\n\treturn String(value);\n}\n\nfunction normalizeAttachments(attachments: ErrorReportAttachment[]): ErrorReportAttachment[] {\n\treturn attachments\n\t\t.filter(att => !!att && typeof att === 'object')\n\t\t.map(att => removeEmptyFields({\n\t\t\tname: att.name,\n\t\t\turl: att.url,\n\t\t\tcontentType: att.contentType,\n\t\t\tsize: typeof att.size === 'number' ? att.size : undefined\n\t\t}))\n\t\t.filter(att => !!att.name);\n}\n\nfunction normalizeReportedAt(value?: string | Date): string | undefined {\n\tif (!value) {\n\t\treturn new Date().toISOString();\n\t}\n\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\n\tconst date = new Date(value);\n\tif (!isNaN(date.getTime())) {\n\t\treturn date.toISOString();\n\t}\n\n\treturn new Date().toISOString();\n}\n\nfunction computeFingerprint(sourceApp: string, environment: string | undefined, message: string, stack?: string): string | undefined {\n\tconst signature = `${sourceApp || ''}:${environment || ''}:${message || ''}:${stack ? stack.split('\\n').slice(0, 5).join('|') : ''}`;\n\treturn createHash('sha256').update(signature).digest('hex');\n}\n\nfunction removeEmptyFields<T extends Record<string, any>>(obj: T): T {\n\tconst cleaned: Record<string, any> = {};\n\tfor (const [key, value] of Object.entries(obj || {})) {\n\t\tif (value === undefined || value === null || value === '') {\n\t\t\tcontinue;\n\t\t}\n\t\tcleaned[key] = value;\n\t}\n\treturn cleaned as T;\n}\n\nfunction mergeMetadata(metadata: Record<string, any> | string | null | undefined, correlationId?: string) {\n\tif (!metadata && !correlationId) {\n\t\treturn undefined;\n\t}\n\n\tconst base = metadata ? normalizeStructured(metadata) : undefined;\n\tif (!correlationId) {\n\t\treturn base;\n\t}\n\n\tif (typeof base === 'string') {\n\t\treturn {\n\t\t\tcorrelationId,\n\t\t\tmessage: base\n\t\t};\n\t}\n\n\tconst metadataObj = (base || {}) as Record<string, any>;\n\tif (!metadataObj.correlationId) {\n\t\tmetadataObj.correlationId = correlationId;\n\t}\n\treturn metadataObj;\n}\n\nfunction shouldSuppressForLocalEnvironment(config: Record<string, any> | null, apiUrl: string): boolean {\n\tif (isLocalUrl(config?.ROOT_URL) || isLocalUrl(config?.SERVER_URL) || process.env.NODE_ENV === 'development') {\n\t\treturn true;\n\t}\n\n\treturn isLocalUrl(apiUrl);\n}\n\nfunction isLocalUrl(url?: string): boolean {\n\tif (!url || typeof url !== 'string') {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst parsed = new URL(url);\n\t\treturn LOCAL_HOSTNAMES.has(parsed.hostname.toLowerCase());\n\t}\n\tcatch {\n\t\treturn /localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0|::1/.test(url);\n\t}\n}\n"]}
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.ErrorAutoFixLogs = void 0;
|
|
40
|
-
var mongo_manager_1 = require("../managers/mongo.manager");
|
|
41
|
-
var resolveio_server_app_1 = require("../resolveio-server-app");
|
|
42
|
-
var schema = {
|
|
43
|
-
_id: {
|
|
44
|
-
type: String,
|
|
45
|
-
optional: true
|
|
46
|
-
},
|
|
47
|
-
__v: {
|
|
48
|
-
type: Number,
|
|
49
|
-
optional: true
|
|
50
|
-
},
|
|
51
|
-
email_hash: {
|
|
52
|
-
type: String
|
|
53
|
-
},
|
|
54
|
-
issue_hash: {
|
|
55
|
-
type: String,
|
|
56
|
-
optional: true
|
|
57
|
-
},
|
|
58
|
-
subject: {
|
|
59
|
-
type: String
|
|
60
|
-
},
|
|
61
|
-
message_id: {
|
|
62
|
-
type: String,
|
|
63
|
-
optional: true
|
|
64
|
-
},
|
|
65
|
-
body: {
|
|
66
|
-
type: String
|
|
67
|
-
},
|
|
68
|
-
status: {
|
|
69
|
-
type: String,
|
|
70
|
-
allowedValues: ['pending', 'in_progress', 'success', 'failed', 'skipped']
|
|
71
|
-
},
|
|
72
|
-
ignored: {
|
|
73
|
-
type: Boolean
|
|
74
|
-
},
|
|
75
|
-
attempt_count: {
|
|
76
|
-
type: Number
|
|
77
|
-
},
|
|
78
|
-
duplicate_count: {
|
|
79
|
-
type: Number
|
|
80
|
-
},
|
|
81
|
-
first_seen_at: {
|
|
82
|
-
type: Date
|
|
83
|
-
},
|
|
84
|
-
last_attempt_at: {
|
|
85
|
-
type: Date,
|
|
86
|
-
optional: true
|
|
87
|
-
},
|
|
88
|
-
last_duplicate_at: {
|
|
89
|
-
type: Date,
|
|
90
|
-
optional: true
|
|
91
|
-
},
|
|
92
|
-
last_result_at: {
|
|
93
|
-
type: Date,
|
|
94
|
-
optional: true
|
|
95
|
-
},
|
|
96
|
-
branch_name: {
|
|
97
|
-
type: String,
|
|
98
|
-
optional: true
|
|
99
|
-
},
|
|
100
|
-
pr_url: {
|
|
101
|
-
type: String,
|
|
102
|
-
optional: true
|
|
103
|
-
},
|
|
104
|
-
plan_summary: {
|
|
105
|
-
type: String,
|
|
106
|
-
optional: true
|
|
107
|
-
},
|
|
108
|
-
plan_body: {
|
|
109
|
-
type: String,
|
|
110
|
-
optional: true
|
|
111
|
-
},
|
|
112
|
-
patches: {
|
|
113
|
-
type: Array,
|
|
114
|
-
optional: true
|
|
115
|
-
},
|
|
116
|
-
'patches.$': {
|
|
117
|
-
type: String
|
|
118
|
-
},
|
|
119
|
-
id_client: {
|
|
120
|
-
type: String,
|
|
121
|
-
optional: true
|
|
122
|
-
},
|
|
123
|
-
client_name: {
|
|
124
|
-
type: String,
|
|
125
|
-
optional: true
|
|
126
|
-
},
|
|
127
|
-
from_email: {
|
|
128
|
-
type: String,
|
|
129
|
-
optional: true
|
|
130
|
-
},
|
|
131
|
-
source_type: {
|
|
132
|
-
type: String,
|
|
133
|
-
optional: true
|
|
134
|
-
},
|
|
135
|
-
classification_reason: {
|
|
136
|
-
type: String,
|
|
137
|
-
optional: true
|
|
138
|
-
},
|
|
139
|
-
codex_task_id: {
|
|
140
|
-
type: String,
|
|
141
|
-
optional: true
|
|
142
|
-
},
|
|
143
|
-
codex_environment: {
|
|
144
|
-
type: String,
|
|
145
|
-
optional: true
|
|
146
|
-
},
|
|
147
|
-
last_error: {
|
|
148
|
-
type: String,
|
|
149
|
-
optional: true
|
|
150
|
-
},
|
|
151
|
-
source_app: {
|
|
152
|
-
type: String,
|
|
153
|
-
optional: true
|
|
154
|
-
},
|
|
155
|
-
source_environment: {
|
|
156
|
-
type: String,
|
|
157
|
-
optional: true
|
|
158
|
-
},
|
|
159
|
-
severity: {
|
|
160
|
-
type: String,
|
|
161
|
-
optional: true
|
|
162
|
-
},
|
|
163
|
-
reported_by: {
|
|
164
|
-
type: String,
|
|
165
|
-
optional: true
|
|
166
|
-
},
|
|
167
|
-
last_reported_at: {
|
|
168
|
-
type: Date,
|
|
169
|
-
optional: true
|
|
170
|
-
},
|
|
171
|
-
report_metadata: {
|
|
172
|
-
type: Object,
|
|
173
|
-
optional: true,
|
|
174
|
-
blackbox: true
|
|
175
|
-
},
|
|
176
|
-
report_context: {
|
|
177
|
-
type: Object,
|
|
178
|
-
optional: true,
|
|
179
|
-
blackbox: true
|
|
180
|
-
},
|
|
181
|
-
attachments: {
|
|
182
|
-
type: Array,
|
|
183
|
-
optional: true
|
|
184
|
-
},
|
|
185
|
-
'attachments.$': {
|
|
186
|
-
type: Object
|
|
187
|
-
},
|
|
188
|
-
'attachments.$.name': {
|
|
189
|
-
type: String,
|
|
190
|
-
optional: true
|
|
191
|
-
},
|
|
192
|
-
'attachments.$.url': {
|
|
193
|
-
type: String,
|
|
194
|
-
optional: true
|
|
195
|
-
},
|
|
196
|
-
'attachments.$.contentType': {
|
|
197
|
-
type: String,
|
|
198
|
-
optional: true
|
|
199
|
-
},
|
|
200
|
-
'attachments.$.size': {
|
|
201
|
-
type: Number,
|
|
202
|
-
optional: true
|
|
203
|
-
},
|
|
204
|
-
createdAt: {
|
|
205
|
-
type: Date,
|
|
206
|
-
optional: true
|
|
207
|
-
},
|
|
208
|
-
updatedAt: {
|
|
209
|
-
type: Date,
|
|
210
|
-
optional: true
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
exports.ErrorAutoFixLogs = null;
|
|
214
|
-
initializeCollection();
|
|
215
|
-
function initializeCollection() {
|
|
216
|
-
var _this = this;
|
|
217
|
-
if (resolveio_server_app_1.ResolveIOServer && resolveio_server_app_1.ResolveIOServer.getMainDB() && mongo_manager_1.MongoManagerModel) {
|
|
218
|
-
var model = mongo_manager_1.MongoManagerModel.create({
|
|
219
|
-
collectionName: 'error-autofix-logs',
|
|
220
|
-
schema: schema,
|
|
221
|
-
useVersionCollection: false,
|
|
222
|
-
useReportBuilder: false,
|
|
223
|
-
reportBuilderLookupTables: [],
|
|
224
|
-
timestamps: true,
|
|
225
|
-
createLogs: false,
|
|
226
|
-
checkSchema: true,
|
|
227
|
-
collectionOptions: null,
|
|
228
|
-
skipCache: true
|
|
229
|
-
});
|
|
230
|
-
exports.ErrorAutoFixLogs = model.collection_main;
|
|
231
|
-
setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
232
|
-
var err_1;
|
|
233
|
-
return __generator(this, function (_a) {
|
|
234
|
-
switch (_a.label) {
|
|
235
|
-
case 0:
|
|
236
|
-
_a.trys.push([0, 5, , 6]);
|
|
237
|
-
return [4 /*yield*/, exports.ErrorAutoFixLogs.createIndex({ email_hash: 1 })];
|
|
238
|
-
case 1:
|
|
239
|
-
_a.sent();
|
|
240
|
-
return [4 /*yield*/, exports.ErrorAutoFixLogs.createIndex({ issue_hash: 1 })];
|
|
241
|
-
case 2:
|
|
242
|
-
_a.sent();
|
|
243
|
-
return [4 /*yield*/, exports.ErrorAutoFixLogs.createIndex({ status: 1 })];
|
|
244
|
-
case 3:
|
|
245
|
-
_a.sent();
|
|
246
|
-
return [4 /*yield*/, exports.ErrorAutoFixLogs.createIndex({ ignored: 1 })];
|
|
247
|
-
case 4:
|
|
248
|
-
_a.sent();
|
|
249
|
-
return [3 /*break*/, 6];
|
|
250
|
-
case 5:
|
|
251
|
-
err_1 = _a.sent();
|
|
252
|
-
console.error('ErrorAutoFixLogs index creation failed', err_1);
|
|
253
|
-
return [3 /*break*/, 6];
|
|
254
|
-
case 6: return [2 /*return*/];
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
}); }, 5000);
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
setImmediate(function () {
|
|
261
|
-
initializeCollection();
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
//# sourceMappingURL=error-auto-fix.collection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/collections/error-auto-fix.collection.ts"],"names":[],"mappings":"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","file":"error-auto-fix.collection.js","sourcesContent":["import { MongoManagerCollection, MongoManagerModel } from '../managers/mongo.manager';\nimport { ErrorAutoFixLogModel } from '../models/error-auto-fix-log.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\n\nconst schema: any = {\n\t_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t__v: {\n\t\ttype: Number,\n\t\toptional: true\n\t},\n\temail_hash: {\n\t\ttype: String\n\t},\n\tissue_hash: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tsubject: {\n\t\ttype: String\n\t},\n\tmessage_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tbody: {\n\t\ttype: String\n\t},\n\tstatus: {\n\t\ttype: String,\n\t\tallowedValues: ['pending', 'in_progress', 'success', 'failed', 'skipped']\n\t},\n\tignored: {\n\t\ttype: Boolean\n\t},\n\tattempt_count: {\n\t\ttype: Number\n\t},\n\tduplicate_count: {\n\t\ttype: Number\n\t},\n\tfirst_seen_at: {\n\t\ttype: Date\n\t},\n\tlast_attempt_at: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tlast_duplicate_at: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tlast_result_at: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tbranch_name: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tpr_url: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tplan_summary: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tplan_body: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tpatches: {\n\t\ttype: Array,\n\t\toptional: true\n\t},\n\t'patches.$': {\n\t\ttype: String\n\t},\n\tid_client: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tclient_name: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tfrom_email: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tsource_type: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tclassification_reason: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tcodex_task_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tcodex_environment: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tlast_error: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tsource_app: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tsource_environment: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tseverity: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\treported_by: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\tlast_reported_at: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\treport_metadata: {\n\t\ttype: Object,\n\t\toptional: true,\n\t\tblackbox: true\n\t},\n\treport_context: {\n\t\ttype: Object,\n\t\toptional: true,\n\t\tblackbox: true\n\t},\n\tattachments: {\n\t\ttype: Array,\n\t\toptional: true\n\t},\n\t'attachments.$': {\n\t\ttype: Object\n\t},\n\t'attachments.$.name': {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t'attachments.$.url': {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t'attachments.$.contentType': {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t'attachments.$.size': {\n\t\ttype: Number,\n\t\toptional: true\n\t},\n\tcreatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tupdatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t}\n};\n\nexport let ErrorAutoFixLogs: MongoManagerCollection<ErrorAutoFixLogModel> = null;\n\ninitializeCollection();\n\nfunction initializeCollection() {\n\tif (ResolveIOServer && ResolveIOServer.getMainDB() && MongoManagerModel) {\n\t\tconst model = MongoManagerModel.create<ErrorAutoFixLogModel>({\n\t\t\tcollectionName: 'error-autofix-logs',\n\t\t\tschema,\n\t\t\tuseVersionCollection: false,\n\t\t\tuseReportBuilder: false,\n\t\t\treportBuilderLookupTables: [],\n\t\t\ttimestamps: true,\n\t\t\tcreateLogs: false,\n\t\t\tcheckSchema: true,\n\t\t\tcollectionOptions: null,\n\t\t\tskipCache: true\n\t\t});\n\t\tErrorAutoFixLogs = model.collection_main;\n\t\tsetTimeout(async () => {\n\t\t\ttry {\n\t\t\t\tawait ErrorAutoFixLogs.createIndex({email_hash: 1});\n\t\t\t\tawait ErrorAutoFixLogs.createIndex({issue_hash: 1});\n\t\t\t\tawait ErrorAutoFixLogs.createIndex({status: 1});\n\t\t\t\tawait ErrorAutoFixLogs.createIndex({ignored: 1});\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconsole.error('ErrorAutoFixLogs index creation failed', err);\n\t\t\t}\n\t\t}, 5000);\n\t}\n\telse {\n\t\tsetImmediate(() => {\n\t\t\tinitializeCollection();\n\t\t});\n\t}\n}\n"]}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
export type ErrorAutoFixLogStatus = 'pending' | 'in_progress' | 'success' | 'failed' | 'skipped';
|
|
2
|
-
export interface ErrorAutoFixAttachment {
|
|
3
|
-
name?: string;
|
|
4
|
-
url?: string;
|
|
5
|
-
contentType?: string;
|
|
6
|
-
size?: number;
|
|
7
|
-
}
|
|
8
|
-
export interface ErrorAutoFixLogModel {
|
|
9
|
-
_id?: string;
|
|
10
|
-
__v?: number;
|
|
11
|
-
email_hash: string;
|
|
12
|
-
issue_hash?: string;
|
|
13
|
-
subject: string;
|
|
14
|
-
message_id?: string;
|
|
15
|
-
body: string;
|
|
16
|
-
status: ErrorAutoFixLogStatus;
|
|
17
|
-
ignored: boolean;
|
|
18
|
-
attempt_count: number;
|
|
19
|
-
duplicate_count: number;
|
|
20
|
-
first_seen_at: Date;
|
|
21
|
-
last_attempt_at?: Date;
|
|
22
|
-
last_duplicate_at?: Date;
|
|
23
|
-
last_result_at?: Date;
|
|
24
|
-
branch_name?: string;
|
|
25
|
-
pr_url?: string;
|
|
26
|
-
plan_summary?: string;
|
|
27
|
-
plan_body?: string;
|
|
28
|
-
patches?: string[];
|
|
29
|
-
id_client?: string;
|
|
30
|
-
client_name?: string;
|
|
31
|
-
from_email?: string;
|
|
32
|
-
source_type?: 'app' | 'infrastructure' | 'noise';
|
|
33
|
-
classification_reason?: string;
|
|
34
|
-
codex_task_id?: string;
|
|
35
|
-
codex_environment?: string;
|
|
36
|
-
last_error?: string;
|
|
37
|
-
source_app?: string;
|
|
38
|
-
source_environment?: string;
|
|
39
|
-
severity?: string;
|
|
40
|
-
reported_by?: string;
|
|
41
|
-
last_reported_at?: Date;
|
|
42
|
-
report_metadata?: Record<string, any>;
|
|
43
|
-
report_context?: Record<string, any>;
|
|
44
|
-
attachments?: ErrorAutoFixAttachment[];
|
|
45
|
-
createdAt?: Date;
|
|
46
|
-
updatedAt?: Date;
|
|
47
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/models/error-auto-fix-log.model.ts"],"names":[],"mappings":"","file":"error-auto-fix-log.model.js","sourcesContent":["export type ErrorAutoFixLogStatus = 'pending' | 'in_progress' | 'success' | 'failed' | 'skipped';\n\nexport interface ErrorAutoFixAttachment {\n\tname?: string;\n\turl?: string;\n\tcontentType?: string;\n\tsize?: number;\n}\n\nexport interface ErrorAutoFixLogModel {\n\t_id?: string;\n\t__v?: number;\n\temail_hash: string;\n\tissue_hash?: string;\n\tsubject: string;\n\tmessage_id?: string;\n\tbody: string;\n\tstatus: ErrorAutoFixLogStatus;\n\tignored: boolean;\n\tattempt_count: number;\n\tduplicate_count: number;\n\tfirst_seen_at: Date;\n\tlast_attempt_at?: Date;\n\tlast_duplicate_at?: Date;\n\tlast_result_at?: Date;\n\tbranch_name?: string;\n\tpr_url?: string;\n\tplan_summary?: string;\n\tplan_body?: string;\n\tpatches?: string[];\n\tid_client?: string;\n\tclient_name?: string;\n\tfrom_email?: string;\n\tsource_type?: 'app' | 'infrastructure' | 'noise';\n\tclassification_reason?: string;\n\tcodex_task_id?: string;\n\tcodex_environment?: string;\n\tlast_error?: string;\n\tsource_app?: string;\n\tsource_environment?: string;\n\tseverity?: string;\n\treported_by?: string;\n\tlast_reported_at?: Date;\n\treport_metadata?: Record<string, any>;\n\treport_context?: Record<string, any>;\n\tattachments?: ErrorAutoFixAttachment[];\n\tcreatedAt?: Date;\n\tupdatedAt?: Date;\n}\n"]}
|