@resolveio/server-lib 20.13.11 → 20.14.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/collections/ai-terminal-conversation.collection.d.ts +2 -0
- package/collections/ai-terminal-conversation.collection.js +133 -0
- package/collections/ai-terminal-conversation.collection.js.map +1 -0
- package/collections/ai-terminal-message.collection.d.ts +2 -0
- package/collections/ai-terminal-message.collection.js +113 -0
- package/collections/ai-terminal-message.collection.js.map +1 -0
- package/collections/communication-metric.collection.d.ts +2 -0
- package/collections/communication-metric.collection.js +133 -0
- package/collections/communication-metric.collection.js.map +1 -0
- package/collections/openai-usage-ledger.collection.d.ts +2 -0
- package/collections/openai-usage-ledger.collection.js +120 -0
- package/collections/openai-usage-ledger.collection.js.map +1 -0
- package/managers/communication-metric.manager.d.ts +16 -0
- package/managers/communication-metric.manager.js +134 -0
- package/managers/communication-metric.manager.js.map +1 -0
- package/managers/method.manager.d.ts +2 -0
- package/managers/method.manager.js +162 -45
- package/managers/method.manager.js.map +1 -1
- package/managers/openai-usage-ledger.manager.d.ts +14 -0
- package/managers/openai-usage-ledger.manager.js +137 -0
- package/managers/openai-usage-ledger.manager.js.map +1 -0
- package/managers/subscription.manager.js +2 -0
- package/managers/subscription.manager.js.map +1 -1
- package/methods/ai-terminal.d.ts +1 -0
- package/methods/ai-terminal.js +1200 -0
- package/methods/ai-terminal.js.map +1 -0
- package/methods/report-builder.js +741 -0
- package/methods/report-builder.js.map +1 -1
- package/methods.ts +27 -0
- package/models/ai-terminal-conversation.model.d.ts +16 -0
- package/models/ai-terminal-conversation.model.js +4 -0
- package/models/ai-terminal-conversation.model.js.map +1 -0
- package/models/ai-terminal-message.model.d.ts +22 -0
- package/models/ai-terminal-message.model.js +4 -0
- package/models/ai-terminal-message.model.js.map +1 -0
- package/models/communication-metric.model.d.ts +20 -0
- package/models/communication-metric.model.js +4 -0
- package/models/communication-metric.model.js.map +1 -0
- package/models/openai-usage-ledger.model.d.ts +14 -0
- package/models/openai-usage-ledger.model.js +4 -0
- package/models/openai-usage-ledger.model.js.map +1 -0
- package/package.json +5 -1
- package/public_api.d.ts +13 -0
- package/public_api.js +13 -0
- package/public_api.js.map +1 -1
- package/publications/ai-terminal.d.ts +1 -0
- package/publications/ai-terminal.js +58 -0
- package/publications/ai-terminal.js.map +1 -0
- package/publications.ts +6 -0
- package/services/codex-client.d.ts +81 -0
- package/services/codex-client.js +991 -0
- package/services/codex-client.js.map +1 -0
- package/services/openai-client.d.ts +46 -0
- package/services/openai-client.js +315 -0
- package/services/openai-client.js.map +1 -0
- package/util/common.js +20 -53
- package/util/common.js.map +1 -1
- package/util/tokenizer.d.ts +5 -0
- package/util/tokenizer.js +35 -0
- package/util/tokenizer.js.map +1 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
24
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
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;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.recordCommunicationMetric = recordCommunicationMetric;
|
|
51
|
+
exports.recordEmailMetric = recordEmailMetric;
|
|
52
|
+
exports.recordTextMessageMetric = recordTextMessageMetric;
|
|
53
|
+
var communication_metric_collection_1 = require("../collections/communication-metric.collection");
|
|
54
|
+
var resolveio_server_app_1 = require("../resolveio-server-app");
|
|
55
|
+
var normalizeString = function (value) {
|
|
56
|
+
if (typeof value !== 'string') {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
var trimmed = value.trim();
|
|
60
|
+
return trimmed.length ? trimmed : undefined;
|
|
61
|
+
};
|
|
62
|
+
var buildMetadata = function (input) {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
var config = ((_a = resolveio_server_app_1.ResolveIOServer.getServerConfig) === null || _a === void 0 ? void 0 : _a.call(resolveio_server_app_1.ResolveIOServer)) || {};
|
|
65
|
+
var metadata = {
|
|
66
|
+
clientSlug: normalizeString(input.clientSlug) || normalizeString((_b = resolveio_server_app_1.ResolveIOServer.getClientName) === null || _b === void 0 ? void 0 : _b.call(resolveio_server_app_1.ResolveIOServer)),
|
|
67
|
+
clientName: normalizeString(input.clientName) || normalizeString(config['CLIENT_NAME']),
|
|
68
|
+
id_client: normalizeString(input.id_client),
|
|
69
|
+
channel: input.channel,
|
|
70
|
+
status: input.status,
|
|
71
|
+
provider: normalizeString(input.provider)
|
|
72
|
+
};
|
|
73
|
+
if (input.metadata && typeof input.metadata === 'object') {
|
|
74
|
+
Object.assign(metadata, input.metadata);
|
|
75
|
+
}
|
|
76
|
+
Object.keys(metadata).forEach(function (key) {
|
|
77
|
+
if (metadata[key] === undefined || metadata[key] === null || metadata[key] === '') {
|
|
78
|
+
delete metadata[key];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return Object.keys(metadata).length ? metadata : undefined;
|
|
82
|
+
};
|
|
83
|
+
function recordCommunicationMetric(input) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
85
|
+
var value, payload, err_1;
|
|
86
|
+
return __generator(this, function (_a) {
|
|
87
|
+
switch (_a.label) {
|
|
88
|
+
case 0:
|
|
89
|
+
if (!input || !input.channel || !input.status) {
|
|
90
|
+
return [2 /*return*/];
|
|
91
|
+
}
|
|
92
|
+
value = Number.isFinite(input.value) ? input.value : 1;
|
|
93
|
+
if (!value) {
|
|
94
|
+
return [2 /*return*/];
|
|
95
|
+
}
|
|
96
|
+
payload = {
|
|
97
|
+
date: input.timestamp instanceof Date ? input.timestamp : new Date(),
|
|
98
|
+
type: "".concat(input.channel, ".").concat(input.status),
|
|
99
|
+
value: value,
|
|
100
|
+
unit: input.unit || 'count',
|
|
101
|
+
metadata: buildMetadata(input)
|
|
102
|
+
};
|
|
103
|
+
_a.label = 1;
|
|
104
|
+
case 1:
|
|
105
|
+
_a.trys.push([1, 3, , 4]);
|
|
106
|
+
return [4 /*yield*/, communication_metric_collection_1.CommunicationMetrics.insertOne(payload)];
|
|
107
|
+
case 2:
|
|
108
|
+
_a.sent();
|
|
109
|
+
return [3 /*break*/, 4];
|
|
110
|
+
case 3:
|
|
111
|
+
err_1 = _a.sent();
|
|
112
|
+
console.error('Failed to record communication metric', err_1);
|
|
113
|
+
return [3 /*break*/, 4];
|
|
114
|
+
case 4: return [2 /*return*/];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function recordEmailMetric(input) {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
121
|
+
return __generator(this, function (_a) {
|
|
122
|
+
return [2 /*return*/, recordCommunicationMetric(__assign(__assign({}, input), { channel: 'email' }))];
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function recordTextMessageMetric(input) {
|
|
127
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
128
|
+
return __generator(this, function (_a) {
|
|
129
|
+
return [2 /*return*/, recordCommunicationMetric(__assign(__assign({}, input), { channel: 'sms' }))];
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
//# sourceMappingURL=communication-metric.manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/managers/communication-metric.manager.ts"],"names":[],"mappings":"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","file":"communication-metric.manager.js","sourcesContent":["import { CommunicationMetrics } from '../collections/communication-metric.collection';\nimport { CommunicationMetricChannel, CommunicationMetricStatus } from '../models/communication-metric.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\n\nexport interface CommunicationMetricInput {\n\tchannel: CommunicationMetricChannel;\n\tstatus: CommunicationMetricStatus;\n\tvalue?: number;\n\tunit?: string;\n\ttimestamp?: Date;\n\tprovider?: string;\n\tclientSlug?: string;\n\tclientName?: string;\n\tid_client?: string;\n\tmetadata?: Record<string, any>;\n}\n\nconst normalizeString = (value: any): string | undefined => {\n\tif (typeof value !== 'string') {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length ? trimmed : undefined;\n};\n\nconst buildMetadata = (input: CommunicationMetricInput): Record<string, any> | undefined => {\n\tconst config = ResolveIOServer.getServerConfig?.() || {};\n\tconst metadata: Record<string, any> = {\n\t\tclientSlug: normalizeString(input.clientSlug) || normalizeString(ResolveIOServer.getClientName?.()),\n\t\tclientName: normalizeString(input.clientName) || normalizeString(config['CLIENT_NAME']),\n\t\tid_client: normalizeString(input.id_client),\n\t\tchannel: input.channel,\n\t\tstatus: input.status,\n\t\tprovider: normalizeString(input.provider)\n\t};\n\n\tif (input.metadata && typeof input.metadata === 'object') {\n\t\tObject.assign(metadata, input.metadata);\n\t}\n\n\tObject.keys(metadata).forEach(key => {\n\t\tif (metadata[key] === undefined || metadata[key] === null || metadata[key] === '') {\n\t\t\tdelete metadata[key];\n\t\t}\n\t});\n\n\treturn Object.keys(metadata).length ? metadata : undefined;\n};\n\nexport async function recordCommunicationMetric(input: CommunicationMetricInput): Promise<void> {\n\tif (!input || !input.channel || !input.status) {\n\t\treturn;\n\t}\n\n\tconst value = Number.isFinite(input.value) ? input.value : 1;\n\tif (!value) {\n\t\treturn;\n\t}\n\n\tconst payload = {\n\t\tdate: input.timestamp instanceof Date ? input.timestamp : new Date(),\n\t\ttype: `${input.channel}.${input.status}`,\n\t\tvalue,\n\t\tunit: input.unit || 'count',\n\t\tmetadata: buildMetadata(input)\n\t};\n\n\ttry {\n\t\tawait CommunicationMetrics.insertOne(payload);\n\t}\n\tcatch (err) {\n\t\tconsole.error('Failed to record communication metric', err);\n\t}\n}\n\nexport async function recordEmailMetric(input: Omit<CommunicationMetricInput, 'channel'>): Promise<void> {\n\treturn recordCommunicationMetric({ ...input, channel: 'email' });\n}\n\nexport async function recordTextMessageMetric(input: Omit<CommunicationMetricInput, 'channel'>): Promise<void> {\n\treturn recordCommunicationMetric({ ...input, channel: 'sms' });\n}\n"]}
|
|
@@ -51,6 +51,8 @@ export declare class MethodManager {
|
|
|
51
51
|
setupEmailWatcher(): void;
|
|
52
52
|
loadPendingEmails(): Promise<void>;
|
|
53
53
|
tryProcessEmail(): Promise<void>;
|
|
54
|
+
private shouldTrackTextMessageMetric;
|
|
55
|
+
private getTextMessageProvider;
|
|
54
56
|
safeStringify(obj: any): string;
|
|
55
57
|
getCircularReplacer(): (key: any, value: any) => any;
|
|
56
58
|
private tryMergeEmailOccurrence;
|
|
@@ -96,6 +96,7 @@ var cron_jobs_1 = require("../fixtures/cron-jobs");
|
|
|
96
96
|
var init_1 = require("../fixtures/init");
|
|
97
97
|
var accounts_1 = require("../methods/accounts");
|
|
98
98
|
var aws_1 = require("../methods/aws");
|
|
99
|
+
var ai_terminal_1 = require("../methods/ai-terminal");
|
|
99
100
|
var collections_1 = require("../methods/collections");
|
|
100
101
|
var counters_1 = require("../methods/counters");
|
|
101
102
|
var cron_jobs_2 = require("../methods/cron-jobs");
|
|
@@ -111,6 +112,7 @@ var resolveio_server_app_1 = require("../resolveio-server-app");
|
|
|
111
112
|
var common_1 = require("../util/common");
|
|
112
113
|
var error_reporter_1 = require("../util/error-reporter");
|
|
113
114
|
var error_tracking_1 = require("../util/error-tracking");
|
|
115
|
+
var communication_metric_manager_1 = require("./communication-metric.manager");
|
|
114
116
|
function appendCorrelationIdToSubject(subject, correlationId) {
|
|
115
117
|
if (!correlationId) {
|
|
116
118
|
return subject;
|
|
@@ -335,6 +337,7 @@ var MethodManager = /** @class */ (function () {
|
|
|
335
337
|
_a.sent();
|
|
336
338
|
(0, accounts_1.loadAccountMethods)(this);
|
|
337
339
|
(0, aws_1.loadAWSMethods)(this);
|
|
340
|
+
(0, ai_terminal_1.loadAiTerminalMethods)(this);
|
|
338
341
|
(0, collections_1.loadCollectionMethods)(this);
|
|
339
342
|
(0, counters_1.loadCounterMethods)(this);
|
|
340
343
|
(0, logs_1.loadLogMethods)(this);
|
|
@@ -587,7 +590,7 @@ var MethodManager = /** @class */ (function () {
|
|
|
587
590
|
};
|
|
588
591
|
MethodManager.prototype.callMethodInternal = function (correlationId, methodName, methodData) {
|
|
589
592
|
return __awaiter(this, void 0, void 0, function () {
|
|
590
|
-
var method, releaseLocalConcurrency, methodCallback_1, functionMethodData_1, session, shouldStartTransaction, executeWithExistingSession_1, monitor_2;
|
|
593
|
+
var method, shouldTrackTextMetric, textMetricProvider, releaseLocalConcurrency, methodCallback_1, functionMethodData_1, session, shouldStartTransaction, executeWithExistingSession_1, monitor_2;
|
|
591
594
|
var _this = this;
|
|
592
595
|
return __generator(this, function (_a) {
|
|
593
596
|
switch (_a.label) {
|
|
@@ -597,6 +600,8 @@ var MethodManager = /** @class */ (function () {
|
|
|
597
600
|
console.log('No Method: ' + methodName);
|
|
598
601
|
throw new Error("No Method: ".concat(methodName));
|
|
599
602
|
}
|
|
603
|
+
shouldTrackTextMetric = this.shouldTrackTextMessageMetric(methodName);
|
|
604
|
+
textMetricProvider = shouldTrackTextMetric ? this.getTextMessageProvider() : undefined;
|
|
600
605
|
return [4 /*yield*/, this.acquireLocalConcurrency(methodName, method.maxConcurrency)];
|
|
601
606
|
case 1:
|
|
602
607
|
releaseLocalConcurrency = _a.sent();
|
|
@@ -679,7 +684,7 @@ var MethodManager = /** @class */ (function () {
|
|
|
679
684
|
!methodName.startsWith('monitor-') &&
|
|
680
685
|
!methodName.startsWith('log');
|
|
681
686
|
executeWithExistingSession_1 = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
682
|
-
var monitor, res, err_3, _a, normalizedError, resolvedCorrelationId;
|
|
687
|
+
var monitor, res, error_2, err_3, _a, normalizedError, resolvedCorrelationId, error_3;
|
|
683
688
|
var _b;
|
|
684
689
|
return __generator(this, function (_c) {
|
|
685
690
|
switch (_c.label) {
|
|
@@ -687,15 +692,33 @@ var MethodManager = /** @class */ (function () {
|
|
|
687
692
|
monitor = this._monitorManagerFunction.startMonitorFunction('Method', methodName, this['user'] || '', '', functionMethodData_1);
|
|
688
693
|
_c.label = 1;
|
|
689
694
|
case 1:
|
|
690
|
-
_c.trys.push([1,
|
|
695
|
+
_c.trys.push([1, 7, 15, 17]);
|
|
691
696
|
return [4 /*yield*/, (_b = method.function).call.apply(_b, __spreadArray([Object.assign({}, this, MethodManager.prototype)], __read(functionMethodData_1), false))];
|
|
692
697
|
case 2:
|
|
693
698
|
res = _c.sent();
|
|
694
699
|
if (methodCallback_1) {
|
|
695
700
|
methodCallback_1(null, res);
|
|
696
701
|
}
|
|
697
|
-
return [
|
|
702
|
+
if (!shouldTrackTextMetric) return [3 /*break*/, 6];
|
|
703
|
+
_c.label = 3;
|
|
698
704
|
case 3:
|
|
705
|
+
_c.trys.push([3, 5, , 6]);
|
|
706
|
+
return [4 /*yield*/, (0, communication_metric_manager_1.recordTextMessageMetric)({
|
|
707
|
+
status: 'sent',
|
|
708
|
+
provider: textMetricProvider,
|
|
709
|
+
metadata: {
|
|
710
|
+
method: methodName
|
|
711
|
+
}
|
|
712
|
+
})];
|
|
713
|
+
case 4:
|
|
714
|
+
_c.sent();
|
|
715
|
+
return [3 /*break*/, 6];
|
|
716
|
+
case 5:
|
|
717
|
+
error_2 = _c.sent();
|
|
718
|
+
console.error('Error recording text message metric:', error_2);
|
|
719
|
+
return [3 /*break*/, 6];
|
|
720
|
+
case 6: return [2 /*return*/, res];
|
|
721
|
+
case 7:
|
|
699
722
|
err_3 = _c.sent();
|
|
700
723
|
if (err_3.code === 112 || err_3.codeName === 'WriteConflict' || err_3.code === 251 || err_3.codeName === 'NoSuchTransaction') {
|
|
701
724
|
throw err_3; // Write error, retry
|
|
@@ -714,13 +737,32 @@ var MethodManager = /** @class */ (function () {
|
|
|
714
737
|
data: methodData,
|
|
715
738
|
error: normalizedError
|
|
716
739
|
}, { context: 'callMethod-existing-session', methodName: methodName }, normalizedError.stack)];
|
|
717
|
-
case
|
|
740
|
+
case 8:
|
|
718
741
|
_c.sent();
|
|
719
742
|
normalizedError.message = "".concat(new Date().toISOString(), " - Error in Method (").concat(methodName, ") - Existing Session: ").concat(normalizedError.message);
|
|
720
743
|
if (methodCallback_1) {
|
|
721
744
|
methodCallback_1(normalizedError, null);
|
|
722
745
|
}
|
|
723
|
-
if (
|
|
746
|
+
if (!shouldTrackTextMetric) return [3 /*break*/, 12];
|
|
747
|
+
_c.label = 9;
|
|
748
|
+
case 9:
|
|
749
|
+
_c.trys.push([9, 11, , 12]);
|
|
750
|
+
return [4 /*yield*/, (0, communication_metric_manager_1.recordTextMessageMetric)({
|
|
751
|
+
status: 'failed',
|
|
752
|
+
provider: textMetricProvider,
|
|
753
|
+
metadata: {
|
|
754
|
+
method: methodName
|
|
755
|
+
}
|
|
756
|
+
})];
|
|
757
|
+
case 10:
|
|
758
|
+
_c.sent();
|
|
759
|
+
return [3 /*break*/, 12];
|
|
760
|
+
case 11:
|
|
761
|
+
error_3 = _c.sent();
|
|
762
|
+
console.error('Error recording text message metric:', error_3);
|
|
763
|
+
return [3 /*break*/, 12];
|
|
764
|
+
case 12:
|
|
765
|
+
if (!!process.env.IS_WORKER_INSTANCE) return [3 /*break*/, 14];
|
|
724
766
|
return [4 /*yield*/, this.callMethod('insertErrorLog', "Error in Method: ".concat(methodName), {
|
|
725
767
|
method: methodName,
|
|
726
768
|
methodData: methodData,
|
|
@@ -732,22 +774,22 @@ var MethodManager = /** @class */ (function () {
|
|
|
732
774
|
},
|
|
733
775
|
correlationId: resolvedCorrelationId
|
|
734
776
|
})];
|
|
735
|
-
case
|
|
777
|
+
case 13:
|
|
736
778
|
_c.sent();
|
|
737
|
-
_c.label =
|
|
738
|
-
case
|
|
739
|
-
case
|
|
740
|
-
case
|
|
779
|
+
_c.label = 14;
|
|
780
|
+
case 14: throw normalizedError;
|
|
781
|
+
case 15: return [4 /*yield*/, this._monitorManagerFunction.finishMonitorFunction(monitor)];
|
|
782
|
+
case 16:
|
|
741
783
|
_c.sent();
|
|
742
784
|
return [7 /*endfinally*/];
|
|
743
|
-
case
|
|
785
|
+
case 17: return [2 /*return*/];
|
|
744
786
|
}
|
|
745
787
|
});
|
|
746
788
|
}); };
|
|
747
789
|
if (shouldStartTransaction) {
|
|
748
790
|
monitor_2 = null;
|
|
749
791
|
return [2 /*return*/, resolveio_server_app_1.ResolveIOServer.getMongoManager().oneTimeTransaction(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
750
|
-
var res, err_4, _a, normalizedError, resolvedCorrelationId;
|
|
792
|
+
var res, error_4, err_4, _a, normalizedError, resolvedCorrelationId, error_5;
|
|
751
793
|
var _b;
|
|
752
794
|
return __generator(this, function (_c) {
|
|
753
795
|
switch (_c.label) {
|
|
@@ -756,15 +798,33 @@ var MethodManager = /** @class */ (function () {
|
|
|
756
798
|
monitor_2 = this._monitorManagerFunction.startMonitorFunction('Method', methodName, this['user'] || '', '', functionMethodData_1);
|
|
757
799
|
_c.label = 1;
|
|
758
800
|
case 1:
|
|
759
|
-
_c.trys.push([1,
|
|
801
|
+
_c.trys.push([1, 7, 15, 17]);
|
|
760
802
|
return [4 /*yield*/, (_b = method.function).call.apply(_b, __spreadArray([Object.assign({}, this, MethodManager.prototype)], __read(functionMethodData_1), false))];
|
|
761
803
|
case 2:
|
|
762
804
|
res = _c.sent();
|
|
763
805
|
if (methodCallback_1) {
|
|
764
806
|
methodCallback_1(null, res);
|
|
765
807
|
}
|
|
766
|
-
return [
|
|
808
|
+
if (!shouldTrackTextMetric) return [3 /*break*/, 6];
|
|
809
|
+
_c.label = 3;
|
|
767
810
|
case 3:
|
|
811
|
+
_c.trys.push([3, 5, , 6]);
|
|
812
|
+
return [4 /*yield*/, (0, communication_metric_manager_1.recordTextMessageMetric)({
|
|
813
|
+
status: 'sent',
|
|
814
|
+
provider: textMetricProvider,
|
|
815
|
+
metadata: {
|
|
816
|
+
method: methodName
|
|
817
|
+
}
|
|
818
|
+
})];
|
|
819
|
+
case 4:
|
|
820
|
+
_c.sent();
|
|
821
|
+
return [3 /*break*/, 6];
|
|
822
|
+
case 5:
|
|
823
|
+
error_4 = _c.sent();
|
|
824
|
+
console.error('Error recording text message metric:', error_4);
|
|
825
|
+
return [3 /*break*/, 6];
|
|
826
|
+
case 6: return [2 /*return*/, res];
|
|
827
|
+
case 7:
|
|
768
828
|
err_4 = _c.sent();
|
|
769
829
|
if (err_4.code === 112 || err_4.codeName === 'WriteConflict' || err_4.code === 251 || err_4.codeName === 'NoSuchTransaction') {
|
|
770
830
|
throw err_4; // Write error, retry
|
|
@@ -783,13 +843,32 @@ var MethodManager = /** @class */ (function () {
|
|
|
783
843
|
data: methodData,
|
|
784
844
|
error: normalizedError
|
|
785
845
|
}, { context: 'callMethod-new-session', methodName: methodName }, normalizedError.stack)];
|
|
786
|
-
case
|
|
846
|
+
case 8:
|
|
787
847
|
_c.sent();
|
|
788
848
|
normalizedError.message = "".concat(new Date().toISOString(), " - Error in Method With Session (").concat(methodName, ") - New Session: ").concat(normalizedError.message);
|
|
789
849
|
if (methodCallback_1) {
|
|
790
850
|
methodCallback_1(normalizedError, null);
|
|
791
851
|
}
|
|
792
|
-
if (
|
|
852
|
+
if (!shouldTrackTextMetric) return [3 /*break*/, 12];
|
|
853
|
+
_c.label = 9;
|
|
854
|
+
case 9:
|
|
855
|
+
_c.trys.push([9, 11, , 12]);
|
|
856
|
+
return [4 /*yield*/, (0, communication_metric_manager_1.recordTextMessageMetric)({
|
|
857
|
+
status: 'failed',
|
|
858
|
+
provider: textMetricProvider,
|
|
859
|
+
metadata: {
|
|
860
|
+
method: methodName
|
|
861
|
+
}
|
|
862
|
+
})];
|
|
863
|
+
case 10:
|
|
864
|
+
_c.sent();
|
|
865
|
+
return [3 /*break*/, 12];
|
|
866
|
+
case 11:
|
|
867
|
+
error_5 = _c.sent();
|
|
868
|
+
console.error('Error recording text message metric:', error_5);
|
|
869
|
+
return [3 /*break*/, 12];
|
|
870
|
+
case 12:
|
|
871
|
+
if (!!process.env.IS_WORKER_INSTANCE) return [3 /*break*/, 14];
|
|
793
872
|
return [4 /*yield*/, this.callMethod('insertErrorLog', "Error in Method: ".concat(methodName), {
|
|
794
873
|
method: methodName,
|
|
795
874
|
methodData: methodData,
|
|
@@ -801,15 +880,15 @@ var MethodManager = /** @class */ (function () {
|
|
|
801
880
|
},
|
|
802
881
|
correlationId: resolvedCorrelationId
|
|
803
882
|
})];
|
|
804
|
-
case
|
|
883
|
+
case 13:
|
|
805
884
|
_c.sent();
|
|
806
|
-
_c.label =
|
|
807
|
-
case
|
|
808
|
-
case
|
|
809
|
-
case
|
|
885
|
+
_c.label = 14;
|
|
886
|
+
case 14: throw normalizedError;
|
|
887
|
+
case 15: return [4 /*yield*/, this._monitorManagerFunction.finishMonitorFunction(monitor_2)];
|
|
888
|
+
case 16:
|
|
810
889
|
_c.sent();
|
|
811
890
|
return [7 /*endfinally*/];
|
|
812
|
-
case
|
|
891
|
+
case 17: return [2 /*return*/];
|
|
813
892
|
}
|
|
814
893
|
});
|
|
815
894
|
}); })];
|
|
@@ -971,7 +1050,7 @@ var MethodManager = /** @class */ (function () {
|
|
|
971
1050
|
case 1:
|
|
972
1051
|
_a.trys.push([1, 5, 6, 9]);
|
|
973
1052
|
_loop_1 = function () {
|
|
974
|
-
var emailId, pendingEmail, queuedAt, timeSinceQueued, remainingDelay, emailHistory, validAttachments, attachmentError, _b, _c, att, response, arrayBuffer, buffer, maxSize, err_6, e_2_1, mailOptions;
|
|
1053
|
+
var emailId, pendingEmail, queuedAt, timeSinceQueued, remainingDelay, emailHistory, validAttachments, attachmentError, _b, _c, att, response, arrayBuffer, buffer, maxSize, err_6, e_2_1, mailOptions, emailProvider;
|
|
975
1054
|
var e_2, _d;
|
|
976
1055
|
return __generator(this, function (_e) {
|
|
977
1056
|
switch (_e.label) {
|
|
@@ -1126,14 +1205,17 @@ var MethodManager = /** @class */ (function () {
|
|
|
1126
1205
|
return newAtt;
|
|
1127
1206
|
});
|
|
1128
1207
|
}
|
|
1129
|
-
|
|
1208
|
+
emailProvider = (!mailOptions.force_ses && this_1._mailerCustom) ? 'custom' : 'ses';
|
|
1130
1209
|
(!mailOptions.force_ses && this_1._mailerCustom ? this_1._mailerCustom : this_1._mailerSES).sendMail(mailOptions, function (err) { return __awaiter(_this, void 0, void 0, function () {
|
|
1131
|
-
var
|
|
1210
|
+
var metricStatus, error_6, error_7;
|
|
1132
1211
|
return __generator(this, function (_a) {
|
|
1133
1212
|
switch (_a.label) {
|
|
1134
1213
|
case 0:
|
|
1135
|
-
|
|
1136
|
-
|
|
1214
|
+
metricStatus = err ? 'failed' : 'sent';
|
|
1215
|
+
_a.label = 1;
|
|
1216
|
+
case 1:
|
|
1217
|
+
_a.trys.push([1, 8, 10, 14]);
|
|
1218
|
+
if (!err) return [3 /*break*/, 3];
|
|
1137
1219
|
console.error('Failed to send email:', err);
|
|
1138
1220
|
return [4 /*yield*/, email_history_collection_1.EmailHistories.updateOne({ _id: emailHistory._id }, {
|
|
1139
1221
|
$set: {
|
|
@@ -1142,39 +1224,56 @@ var MethodManager = /** @class */ (function () {
|
|
|
1142
1224
|
completedAt: new Date(),
|
|
1143
1225
|
},
|
|
1144
1226
|
})];
|
|
1145
|
-
case 1:
|
|
1146
|
-
_a.sent();
|
|
1147
|
-
return [3 /*break*/, 6];
|
|
1148
1227
|
case 2:
|
|
1149
|
-
|
|
1150
|
-
return [
|
|
1228
|
+
_a.sent();
|
|
1229
|
+
return [3 /*break*/, 7];
|
|
1151
1230
|
case 3:
|
|
1231
|
+
if (!(emailHistory.email === 'dev@resolveio.com')) return [3 /*break*/, 5];
|
|
1232
|
+
return [4 /*yield*/, email_history_collection_1.EmailHistories.deleteOne({ _id: emailHistory._id })];
|
|
1233
|
+
case 4:
|
|
1152
1234
|
_a.sent();
|
|
1153
|
-
return [3 /*break*/,
|
|
1154
|
-
case
|
|
1235
|
+
return [3 /*break*/, 7];
|
|
1236
|
+
case 5: return [4 /*yield*/, email_history_collection_1.EmailHistories.updateOne({ _id: emailHistory._id }, {
|
|
1155
1237
|
$set: {
|
|
1156
1238
|
status: 'completed',
|
|
1157
1239
|
completedAt: new Date(),
|
|
1158
1240
|
},
|
|
1159
1241
|
})];
|
|
1160
|
-
case
|
|
1242
|
+
case 6:
|
|
1161
1243
|
_a.sent();
|
|
1162
|
-
_a.label =
|
|
1163
|
-
case
|
|
1164
|
-
case
|
|
1165
|
-
|
|
1166
|
-
console.error('Error in sendMail callback:',
|
|
1244
|
+
_a.label = 7;
|
|
1245
|
+
case 7: return [3 /*break*/, 14];
|
|
1246
|
+
case 8:
|
|
1247
|
+
error_6 = _a.sent();
|
|
1248
|
+
console.error('Error in sendMail callback:', error_6);
|
|
1167
1249
|
return [4 /*yield*/, email_history_collection_1.EmailHistories.updateOne({ _id: emailHistory._id }, {
|
|
1168
1250
|
$set: {
|
|
1169
1251
|
status: 'failed',
|
|
1170
|
-
error: typeof
|
|
1252
|
+
error: typeof error_6 === 'string' ? error_6 : this.safeStringify(error_6),
|
|
1171
1253
|
completedAt: new Date(),
|
|
1172
1254
|
},
|
|
1173
1255
|
})];
|
|
1174
|
-
case
|
|
1256
|
+
case 9:
|
|
1257
|
+
_a.sent();
|
|
1258
|
+
return [3 /*break*/, 14];
|
|
1259
|
+
case 10:
|
|
1260
|
+
_a.trys.push([10, 12, , 13]);
|
|
1261
|
+
return [4 /*yield*/, (0, communication_metric_manager_1.recordEmailMetric)({
|
|
1262
|
+
status: metricStatus,
|
|
1263
|
+
provider: emailProvider,
|
|
1264
|
+
metadata: {
|
|
1265
|
+
method: 'sendEmail'
|
|
1266
|
+
}
|
|
1267
|
+
})];
|
|
1268
|
+
case 11:
|
|
1175
1269
|
_a.sent();
|
|
1176
|
-
return [3 /*break*/,
|
|
1177
|
-
case
|
|
1270
|
+
return [3 /*break*/, 13];
|
|
1271
|
+
case 12:
|
|
1272
|
+
error_7 = _a.sent();
|
|
1273
|
+
console.error('Error recording email metric:', error_7);
|
|
1274
|
+
return [3 /*break*/, 13];
|
|
1275
|
+
case 13: return [7 /*endfinally*/];
|
|
1276
|
+
case 14: return [2 /*return*/];
|
|
1178
1277
|
}
|
|
1179
1278
|
});
|
|
1180
1279
|
}); });
|
|
@@ -1215,6 +1314,24 @@ var MethodManager = /** @class */ (function () {
|
|
|
1215
1314
|
});
|
|
1216
1315
|
});
|
|
1217
1316
|
};
|
|
1317
|
+
MethodManager.prototype.shouldTrackTextMessageMetric = function (methodName) {
|
|
1318
|
+
var normalized = String(methodName || '').trim().toLowerCase();
|
|
1319
|
+
if (!normalized) {
|
|
1320
|
+
return false;
|
|
1321
|
+
}
|
|
1322
|
+
return normalized.startsWith('sendsms') || normalized.startsWith('sendtext');
|
|
1323
|
+
};
|
|
1324
|
+
MethodManager.prototype.getTextMessageProvider = function () {
|
|
1325
|
+
var _a, _b, _c;
|
|
1326
|
+
var provider = ((_a = this.serverConfig) === null || _a === void 0 ? void 0 : _a['SMS_PROVIDER']) || '';
|
|
1327
|
+
if (typeof provider === 'string' && provider.trim().length) {
|
|
1328
|
+
return provider.trim().toLowerCase();
|
|
1329
|
+
}
|
|
1330
|
+
if (((_b = this.serverConfig) === null || _b === void 0 ? void 0 : _b['TWILIO_SID']) || ((_c = this.serverConfig) === null || _c === void 0 ? void 0 : _c['TWILIO_AUTH_TOKEN'])) {
|
|
1331
|
+
return 'twilio';
|
|
1332
|
+
}
|
|
1333
|
+
return undefined;
|
|
1334
|
+
};
|
|
1218
1335
|
MethodManager.prototype.safeStringify = function (obj) {
|
|
1219
1336
|
try {
|
|
1220
1337
|
return JSON.stringify(obj, this.getCircularReplacer());
|