@resolveio/server-lib 22.2.21 → 22.2.23
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/customer-portal-password.collection.d.ts +3 -0
- package/collections/customer-portal-password.collection.js +75 -0
- package/collections/customer-portal-password.collection.js.map +1 -0
- package/managers/mongo.manager.js +11 -4
- package/managers/mongo.manager.js.map +1 -1
- package/managers/openai-usage-ledger.manager.d.ts +1 -1
- package/managers/openai-usage-ledger.manager.js +4 -3
- package/managers/openai-usage-ledger.manager.js.map +1 -1
- package/methods/accounts.js +85 -2
- package/methods/accounts.js.map +1 -1
- package/methods/ai-terminal.js +10 -17
- package/methods/ai-terminal.js.map +1 -1
- package/methods/mongo-explorer.js +2 -2
- package/methods/mongo-explorer.js.map +1 -1
- package/methods/report-builder.js +11 -13
- package/methods/report-builder.js.map +1 -1
- package/methods.ts +5 -2
- package/models/customer-portal-password.model.d.ts +11 -0
- package/models/customer-portal-password.model.js +4 -0
- package/models/customer-portal-password.model.js.map +1 -0
- package/package.json +1 -1
- package/public_api.d.ts +3 -0
- package/public_api.js +3 -0
- package/public_api.js.map +1 -1
- package/util/customer-portal-password.d.ts +13 -0
- package/util/customer-portal-password.js +209 -0
- package/util/customer-portal-password.js.map +1 -0
|
@@ -96,13 +96,14 @@ var estimateCost = function (model, inputTokens, outputTokens) {
|
|
|
96
96
|
};
|
|
97
97
|
function recordOpenAIUsage(input) {
|
|
98
98
|
return __awaiter(this, void 0, void 0, function () {
|
|
99
|
-
var inputTokens, outputTokens, totalTokens, model, costEstimate;
|
|
99
|
+
var idClient, inputTokens, outputTokens, totalTokens, model, costEstimate;
|
|
100
100
|
return __generator(this, function (_a) {
|
|
101
101
|
switch (_a.label) {
|
|
102
102
|
case 0:
|
|
103
|
-
if (!input
|
|
103
|
+
if (!input) {
|
|
104
104
|
return [2 /*return*/];
|
|
105
105
|
}
|
|
106
|
+
idClient = String(input.id_client || '').trim();
|
|
106
107
|
inputTokens = toNumber(input.input_tokens);
|
|
107
108
|
outputTokens = toNumber(input.output_tokens);
|
|
108
109
|
totalTokens = toNumber(input.total_tokens);
|
|
@@ -114,7 +115,7 @@ function recordOpenAIUsage(input) {
|
|
|
114
115
|
? input.cost_estimate
|
|
115
116
|
: estimateCost(model, inputTokens, outputTokens);
|
|
116
117
|
return [4 /*yield*/, openai_usage_ledger_collection_1.OpenAIUsageLedger.insertOne({
|
|
117
|
-
id_client:
|
|
118
|
+
id_client: idClient,
|
|
118
119
|
timestamp: input.timestamp || new Date(),
|
|
119
120
|
model: model,
|
|
120
121
|
input_tokens: inputTokens,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/managers/openai-usage-ledger.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFA,
|
|
1
|
+
{"version":3,"sources":["../../src/managers/openai-usage-ledger.manager.ts"],"names":[],"mappings":"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","file":"openai-usage-ledger.manager.js","sourcesContent":["import { round } from '../util/common';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { OpenAIUsageLedger } from '../collections/openai-usage-ledger.collection';\n\nexport interface OpenAIUsageRecordInput {\n\tid_client?: string;\n\tmodel: string;\n\tinput_tokens: number;\n\toutput_tokens: number;\n\ttotal_tokens: number;\n\tbillable?: boolean;\n\tcategory?: string;\n\tid_request?: string;\n\tid_conversation?: string;\n\ttimestamp?: Date;\n\tcost_estimate?: number;\n}\n\ntype PricingConfig = {\n\tinputPer1k: number;\n\toutputPer1k: number;\n};\n\nconst toNumber = (value: any): number => {\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : 0;\n};\n\nconst normalizeModelKey = (value: string): string => {\n\treturn String(value || '').trim().toLowerCase();\n};\n\nconst parsePricingJson = (raw: string): Record<string, PricingConfig> => {\n\tif (!raw) {\n\t\treturn {};\n\t}\n\ttry {\n\t\tconst parsed = JSON.parse(raw);\n\t\tif (!parsed || typeof parsed !== 'object') {\n\t\t\treturn {};\n\t\t}\n\t\tconst out: Record<string, PricingConfig> = {};\n\t\tObject.keys(parsed).forEach((key) => {\n\t\t\tconst entry = parsed[key] || {};\n\t\t\tconst inputPer1k = toNumber(entry.inputPer1k ?? entry.input ?? entry.prompt ?? 0);\n\t\t\tconst outputPer1k = toNumber(entry.outputPer1k ?? entry.output ?? entry.completion ?? 0);\n\t\t\tif (inputPer1k || outputPer1k) {\n\t\t\t\tout[normalizeModelKey(key)] = { inputPer1k, outputPer1k };\n\t\t\t}\n\t\t});\n\t\treturn out;\n\t}\n\tcatch {\n\t\treturn {};\n\t}\n};\n\nconst resolvePricingConfig = (): { perModel: Record<string, PricingConfig>; defaultPricing: PricingConfig } => {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst rawJson = String(config['OPENAI_MODEL_PRICING'] ?? process.env.OPENAI_MODEL_PRICING ?? '').trim();\n\tconst defaultInput = toNumber(config['OPENAI_COST_PER_1K_INPUT_TOKENS'] ?? process.env.OPENAI_COST_PER_1K_INPUT_TOKENS ?? 0);\n\tconst defaultOutput = toNumber(config['OPENAI_COST_PER_1K_OUTPUT_TOKENS'] ?? process.env.OPENAI_COST_PER_1K_OUTPUT_TOKENS ?? 0);\n\treturn {\n\t\tperModel: parsePricingJson(rawJson),\n\t\tdefaultPricing: { inputPer1k: defaultInput, outputPer1k: defaultOutput }\n\t};\n};\n\nconst estimateCost = (model: string, inputTokens: number, outputTokens: number): number => {\n\tconst { perModel, defaultPricing } = resolvePricingConfig();\n\tconst normalizedModel = normalizeModelKey(model);\n\tconst pricing = perModel[normalizedModel] || defaultPricing;\n\tif (!pricing.inputPer1k && !pricing.outputPer1k) {\n\t\treturn 0;\n\t}\n\tconst inputCost = (toNumber(inputTokens) / 1000) * pricing.inputPer1k;\n\tconst outputCost = (toNumber(outputTokens) / 1000) * pricing.outputPer1k;\n\treturn round(inputCost + outputCost, 6);\n};\n\nexport async function recordOpenAIUsage(input: OpenAIUsageRecordInput): Promise<void> {\n\tif (!input) {\n\t\treturn;\n\t}\n\tconst idClient = String(input.id_client || '').trim();\n\tconst inputTokens = toNumber(input.input_tokens);\n\tconst outputTokens = toNumber(input.output_tokens);\n\tconst totalTokens = toNumber(input.total_tokens);\n\tif (!totalTokens && (!inputTokens && !outputTokens)) {\n\t\treturn;\n\t}\n\tconst model = String(input.model || '').trim() || 'unknown';\n\tconst costEstimate = Number.isFinite(input.cost_estimate)\n\t\t? input.cost_estimate\n\t\t: estimateCost(model, inputTokens, outputTokens);\n\n\tawait OpenAIUsageLedger.insertOne({\n\t\tid_client: idClient,\n\t\ttimestamp: input.timestamp || new Date(),\n\t\tmodel,\n\t\tinput_tokens: inputTokens,\n\t\toutput_tokens: outputTokens,\n\t\ttotal_tokens: totalTokens || (inputTokens + outputTokens),\n\t\tcost_estimate: costEstimate,\n\t\tbillable: input.billable !== false,\n\t\tcategory: input.category || '',\n\t\tid_request: input.id_request || '',\n\t\tid_conversation: input.id_conversation || ''\n\t});\n}\n"]}
|
package/methods/accounts.js
CHANGED
|
@@ -54,6 +54,7 @@ var simpl_schema_1 = require("simpl-schema");
|
|
|
54
54
|
var user_collection_1 = require("../collections/user.collection");
|
|
55
55
|
var resolveio_server_app_1 = require("../resolveio-server-app");
|
|
56
56
|
var common_1 = require("../util/common");
|
|
57
|
+
var customer_portal_password_1 = require("../util/customer-portal-password");
|
|
57
58
|
var error_reporter_1 = require("../util/error-reporter");
|
|
58
59
|
function loadAccountMethods(methodManager) {
|
|
59
60
|
methodManager.methods({
|
|
@@ -319,12 +320,56 @@ function loadAccountMethods(methodManager) {
|
|
|
319
320
|
case 0: return [4 /*yield*/, user_collection_1.Users.findOne({ _id: userId })];
|
|
320
321
|
case 1:
|
|
321
322
|
user = _a.sent();
|
|
322
|
-
if (!(user && !user.roles.super_admin)) return [3 /*break*/,
|
|
323
|
+
if (!(user && !user.roles.super_admin)) return [3 /*break*/, 4];
|
|
323
324
|
return [4 /*yield*/, user_collection_1.Users.setPassword(user, password)];
|
|
324
325
|
case 2:
|
|
326
|
+
_a.sent();
|
|
327
|
+
return [4 /*yield*/, (0, customer_portal_password_1.saveCustomerPortalPassword)(user, password, {
|
|
328
|
+
updatedByUserId: this.id_user,
|
|
329
|
+
updatedByUser: this.user
|
|
330
|
+
})];
|
|
331
|
+
case 3:
|
|
325
332
|
_a.sent();
|
|
326
333
|
return [2 /*return*/, true];
|
|
327
|
-
case
|
|
334
|
+
case 4: throw new Error('Error in Set User Password: Invalid User');
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
getCustomerPortalUserPassword: {
|
|
341
|
+
check: new simpl_schema_1.default({
|
|
342
|
+
userId: {
|
|
343
|
+
type: String
|
|
344
|
+
}
|
|
345
|
+
}),
|
|
346
|
+
function: function (userId) {
|
|
347
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
348
|
+
var methodUser, targetUser, result;
|
|
349
|
+
return __generator(this, function (_a) {
|
|
350
|
+
switch (_a.label) {
|
|
351
|
+
case 0: return [4 /*yield*/, resolveMethodUser(this.id_user, this.user)];
|
|
352
|
+
case 1:
|
|
353
|
+
methodUser = _a.sent();
|
|
354
|
+
if (!canViewCustomerPortalPasswords(methodUser)) {
|
|
355
|
+
throw new Error('Error in Get Customer Portal User Password: Unauthorized');
|
|
356
|
+
}
|
|
357
|
+
return [4 /*yield*/, user_collection_1.Users.findOne({ _id: userId })];
|
|
358
|
+
case 2:
|
|
359
|
+
targetUser = _a.sent();
|
|
360
|
+
if (!targetUser) {
|
|
361
|
+
throw new Error('Error in Get Customer Portal User Password: Invalid User');
|
|
362
|
+
}
|
|
363
|
+
if (!(0, customer_portal_password_1.isCustomerPortalUser)(targetUser)) {
|
|
364
|
+
throw new Error('Error in Get Customer Portal User Password: User is not a customer portal user');
|
|
365
|
+
}
|
|
366
|
+
return [4 /*yield*/, (0, customer_portal_password_1.getDecryptedCustomerPortalPassword)(userId)];
|
|
367
|
+
case 3:
|
|
368
|
+
result = _a.sent();
|
|
369
|
+
return [2 /*return*/, {
|
|
370
|
+
password: result.password,
|
|
371
|
+
last_set_at: result.lastSetAt || null
|
|
372
|
+
}];
|
|
328
373
|
}
|
|
329
374
|
});
|
|
330
375
|
});
|
|
@@ -537,5 +582,43 @@ function valuesMatch(a, b, multiple) {
|
|
|
537
582
|
return buildOptionKey(a) === buildOptionKey(b);
|
|
538
583
|
}
|
|
539
584
|
var STICKY_MAX_OPTIONS = 200;
|
|
585
|
+
function resolveMethodUser(id_user, username) {
|
|
586
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
587
|
+
var userById, userByUsername;
|
|
588
|
+
return __generator(this, function (_a) {
|
|
589
|
+
switch (_a.label) {
|
|
590
|
+
case 0:
|
|
591
|
+
if (!id_user) return [3 /*break*/, 2];
|
|
592
|
+
return [4 /*yield*/, user_collection_1.Users.findById(id_user)];
|
|
593
|
+
case 1:
|
|
594
|
+
userById = _a.sent();
|
|
595
|
+
if (userById) {
|
|
596
|
+
return [2 /*return*/, userById];
|
|
597
|
+
}
|
|
598
|
+
_a.label = 2;
|
|
599
|
+
case 2:
|
|
600
|
+
if (!username) return [3 /*break*/, 4];
|
|
601
|
+
return [4 /*yield*/, user_collection_1.Users.findOne({ username: username })];
|
|
602
|
+
case 3:
|
|
603
|
+
userByUsername = _a.sent();
|
|
604
|
+
if (userByUsername) {
|
|
605
|
+
return [2 /*return*/, userByUsername];
|
|
606
|
+
}
|
|
607
|
+
_a.label = 4;
|
|
608
|
+
case 4: return [2 /*return*/, null];
|
|
609
|
+
}
|
|
610
|
+
});
|
|
611
|
+
});
|
|
612
|
+
}
|
|
613
|
+
function canViewCustomerPortalPasswords(user) {
|
|
614
|
+
if (!user || !user.roles) {
|
|
615
|
+
return false;
|
|
616
|
+
}
|
|
617
|
+
if (user.roles.super_admin) {
|
|
618
|
+
return true;
|
|
619
|
+
}
|
|
620
|
+
var groups = Array.isArray(user.roles.groups) ? user.roles.groups : [];
|
|
621
|
+
return groups.some(function (group) { return Array.isArray(group === null || group === void 0 ? void 0 : group.views) && group.views.includes('/admin/customer-user'); });
|
|
622
|
+
}
|
|
540
623
|
|
|
541
624
|
//# sourceMappingURL=accounts.js.map
|
package/methods/accounts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/accounts.ts"],"names":[],"mappings":"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","file":"accounts.js","sourcesContent":["import * as handlebars from 'handlebars';\nimport * as jwt from 'jsonwebtoken';\nimport SimpleSchema from 'simpl-schema';\nimport { Users } from '../collections/user.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { StickySelectOption, StickySelectPreference, UserModel } from '../models/user.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, objectIdHexString } from '../util/common';\nimport { ErrorReporter } from '../util/error-reporter';\n\nexport function loadAccountMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tincorrectUser: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\told_user: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tnew_user: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tclient_subs: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'client_subs.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(old_user, new_user, client_subs) {\n\t\t\t\tif (ResolveIOServer.getMainServer()) {\n\t\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWebSocketManager().getWebSocket(this.id_ws);\n\t\t\t\t\tconst correlationId = objectIdHexString();\n\t\t\t\t\tawait ErrorReporter.report({\n\t\t\t\t\t\tsourceApp: 'method-accounts',\n\t\t\t\t\t\tmessage: 'SERVER - WRONG USER Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tws,\n\t\t\t\t\t\t\tuserMethod: this.user,\n\t\t\t\t\t\t\tid_user: this.id_user,\n\t\t\t\t\t\t\tactiveSubs: ResolveIOServer.getMainServer().getSubscriptionManager().getActiveSubscriptions(),\n\t\t\t\t\t\t\told_user,\n\t\t\t\t\t\t\tnew_user,\n\t\t\t\t\t\t\tclient_subs\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tcontext: 'incorrectUser',\n\t\t\t\t\t\t\tcorrelationId\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcorrelationId\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn Promise.resolve(null);\n\t\t\t}\n\t\t},\n\t\treloadWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: async function(id_ws) {\n\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWebSocketManager().getWebSocket(id_ws);\n\n\t\t\t\tif (ws) {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('Error in Reload WS: No WS');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\treconnectWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: async function(id_ws) {\n\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWebSocketManager().getWebSocket(id_ws);\n\n\t\t\t\tif (ws) {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('Error in Reconnect WS: No WS');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdisconnectWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: async function(id_ws) {\n\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWebSocketManager().getWebSocket(id_ws);\n\n\t\t\t\tif (ws) {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('Error in Disconnect WS: No WS');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcreateUserAndEmailEnrollment: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tnewUser: {\n\t\t\t\t\ttype: Users['simplschema']\n\t\t\t\t},\n\t\t\t\tsendEnrollmentEmail: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(newUser: UserModel, sendEnrollmentEmail = true) {\n\t\t\t\tif (newUser.username.toLocaleLowerCase() === 'admin') {\n\t\t\t\t\tthrow new Error('Error in Create User And Email Enrollment: Username can not be admin');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet otherUser = await Users.findOne({\n\t\t\t\t\t\t$or: [\n\t\t\t\t\t\t\t{username: newUser.username.toLocaleLowerCase()},\n\t\t\t\t\t\t\t{email: newUser.email.toLocaleLowerCase()}\n\t\t\t\t\t\t]\n\t\t\t\t\t});\n\n\t\t\t\t\tif (otherUser) {\n\t\t\t\t\t\tthrow new Error('Error in Create User And Email Enrollment: Username/Email is already used');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tnewUser._id = objectIdHexString();\n\n\t\t\t\tnewUser.services = {\n\t\t\t\t\tenrollment: jwt.sign({id_user: newUser._id}, this.serverConfig['JWT_SECRET'], {\n\t\t\t\t\t\texpiresIn : 3 * 24 * 60 * 60 * 1000 // 3 days\n\t\t\t\t\t})\n\t\t\t\t};\n\n\t\t\t\tnewUser.is_customer = false;\n\t\t\t\tawait Users.insertOne(newUser);\n\n\t\t\t\tif (sendEnrollmentEmail) {\n\t\t\t\t\tlet emailData = {\n\t\t\t\t\t\tfullname: newUser.fullname,\n\t\t\t\t\t\tuser: this.user,\n\t\t\t\t\t\turl: (this.serverConfig['ROOT_URL'] + '/enroll-account?' + encodeURIComponent(this.serverConfig['SERVER_URL']) + '&' + newUser.services['enrollment'])\n\t\t\t\t\t};\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet html = this.readFile('email-templates/enrollment.html');\n\t\t\t\t\t\tlet template = handlebars.compile(html);\n\t\t\t\t\t\thandlebars.registerHelper('equals', (a, b) => {\n\t\t\t\t\t\t\treturn a === b;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tawait this.sendEmail(newUser.email, 'ResolveIO (' + ResolveIOServer.getClientName() + ') - Enrollment Email', '', template(emailData), null, null, '');\n\n\t\t\t\t\t\treturn newUser;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\terr.message = `Error in Create User And Email Enrollment: email-templates/enrollment.html - ${err.message}`;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn newUser;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresetUserPassword: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(userId: string) {\n\t\t\t\tlet user = await Users.findOne({_id: userId});\n\t\n\t\t\t\tif (user) {\n\t\t\t\t\tif (!user.services) {\n\t\t\t\t\t\tuser.services = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tuser.services['forgot_password'] = jwt.sign({id_user: userId}, this.serverConfig['JWT_SECRET']);\n\n\t\t\t\t\tlet emailData = {\n\t\t\t\t\t\tuserToChangePassword: user.fullname,\n\t\t\t\t\t\tuserWhoResetPassword: this.user,\n\t\t\t\t\t\turl: (this.serverConfig['ROOT_URL'] + '/forgot-password?' + encodeURIComponent(this.serverConfig['SERVER_URL']) + '&' + user.services['forgot_password'])\n\t\t\t\t\t};\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {services: user.services, attempts: 0}});\n\t\t\t\t\t\tlet html = this.readFile('email-templates/forgot-password.html');\n\t\t\t\t\t\tlet template = handlebars.compile(html);\n\t\t\t\t\t\thandlebars.registerHelper('equals', (a, b) => {\n\t\t\t\t\t\t\treturn a === b;\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\tawait this.sendEmail(user.email, 'ResolveIO (' + ResolveIOServer.getClientName() + ') - Forgot Password', '', template(emailData), null, null, '');\n\t\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\terr.message = `Error in Reset User Password: email-templates/forgot-password.html - ${err.message}`;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthrow new Error('Error in Reset User Password: Invalid User');\n\t\t\t}\n\t\t},\n\t\tsetUserPassword: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpassword: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(userId: string, password: string) {\n\t\t\t\tlet user = await Users.findOne({_id: userId});\n\t\n\t\t\t\tif (user && !user.roles.super_admin) {\n\t\t\t\t\tawait Users.setPassword(user, password);\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('Error in Set User Password: Invalid User');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsaveUserStickySelects: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tstickySelects: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'stickySelects.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tid_user: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(stickySelects: any[], id_user?: string) {\n\t\t\t\tconst targetUserId = id_user || this.id_user;\n\t\t\t\tif (!targetUserId) {\n\t\t\t\t\tthrow new Error('Error in Save User Sticky Selects: Invalid User');\n\t\t\t\t}\n\n\t\t\t\tlet attempts = 0;\n\t\t\t\tlet mergedStickySelects: StickySelectPreference[] = [];\n\t\t\t\tlet nextVersion = 0;\n\n\t\t\t\twhile (attempts < 5) {\n\t\t\t\t\tconst user = await Users.findOne({_id: targetUserId});\n\t\t\t\t\tif (!user) {\n\t\t\t\t\t\tthrow new Error('Error in Save User Sticky Selects: Invalid User');\n\t\t\t\t\t}\n\n\t\t\t\t\tmergedStickySelects = mergeStickySelects(user.other?.stickySelects, stickySelects);\n\t\t\t\t\tconst nextUser: UserModel = deepCopy(user);\n\t\t\t\t\tnextUser.other = {...(nextUser.other || {}), stickySelects: mergedStickySelects};\n\n\t\t\t\t\tconst res: any = await Users.replaceOne({_id: nextUser._id, __v: user.__v} as any, nextUser, {}, false, false, user);\n\t\t\t\t\tif (res && res.modifiedCount) {\n\t\t\t\t\t\tnextVersion = (user.__v || 0) + 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tattempts += 1;\n\t\t\t\t}\n\n\t\t\t\tif (attempts >= 5) {\n\t\t\t\t\tthrow new Error('Error in Save User Sticky Selects: Could not acquire latest version');\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tstickySelects: mergedStickySelects,\n\t\t\t\t\t__v: nextVersion\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction mergeStickySelects(existingList: any, incomingList: StickySelectPreference[]): StickySelectPreference[] {\n\tconst existingMap = new Map<string, StickySelectPreference>();\n\n\tif (Array.isArray(existingList)) {\n\t\texistingList.forEach(entry => {\n\t\t\tconst normalized = normalizeStickyPreference(entry);\n\t\t\tif (normalized && normalized.key) {\n\t\t\t\texistingMap.set(normalized.key, normalized);\n\t\t\t}\n\t\t});\n\t}\n\n\tfor (let i = 0; i < incomingList.length; i++) {\n\t\tconst normalized = normalizeStickyPreference(incomingList[i]);\n\t\tif (!normalized || !normalized.key) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst prev = existingMap.get(normalized.key);\n\t\tconst mergedOptions = trimOptions(normalized.options && normalized.options.length\n\t\t\t? mergeOptions(prev?.options || [], normalized.options)\n\t\t\t: (prev?.options || []));\n\n\t\tlet defaultValue = normalized.defaultValue !== undefined ? normalized.defaultValue : (prev ? prev.defaultValue : null);\n\t\tif (defaultValue === undefined) {\n\t\t\tdefaultValue = null;\n\t\t}\n\n\t\tlet defaultLabel = cleanStickyLabel(normalized.defaultLabel);\n\t\tif (!defaultLabel && prev?.defaultLabel) {\n\t\t\tdefaultLabel = cleanStickyLabel(prev.defaultLabel);\n\t\t}\n\n\t\tif (defaultValue !== null && !defaultLabel) {\n\t\t\tconst optionLabel = mergedOptions.find(opt => valuesMatch(opt.value, defaultValue, !!normalized.multiple))?.label || '';\n\t\t\tdefaultLabel = cleanStickyLabel(optionLabel);\n\t\t}\n\n\t\texistingMap.set(normalized.key, {\n\t\t\tkey: normalized.key,\n\t\t\tdefaultValue,\n\t\t\tdefaultLabel,\n\t\t\tmultiple: normalized.multiple !== undefined ? normalized.multiple : !!prev?.multiple,\n\t\t\toptions: mergedOptions,\n\t\t\tupdatedAt: new Date().toISOString()\n\t\t});\n\t}\n\n\treturn Array.from(existingMap.values());\n}\n\nfunction mergeOptions(existing: StickySelectOption[], incoming: StickySelectOption[]): StickySelectOption[] {\n\tconst map = new Map<string, StickySelectOption>();\n\n\tnormalizeStickyOptions(existing).forEach(opt => {\n\t\tconst key = buildOptionKey(opt.value);\n\t\tmap.set(key, opt);\n\t});\n\n\tnormalizeStickyOptions(incoming).forEach(opt => {\n\t\tconst key = buildOptionKey(opt.value);\n\t\tmap.set(key, opt);\n\t});\n\n\treturn Array.from(map.values());\n}\n\nfunction trimOptions(options: StickySelectOption[]): StickySelectOption[] {\n\tif (!Array.isArray(options)) {\n\t\treturn [];\n\t}\n\n\tif (options.length <= STICKY_MAX_OPTIONS) {\n\t\treturn options;\n\t}\n\n\treturn options.slice(0, STICKY_MAX_OPTIONS);\n}\n\nfunction normalizeStickyPreference(entry: any): StickySelectPreference | null {\n\tif (!entry || !entry.key) {\n\t\treturn null;\n\t}\n\n\tconst normalized: StickySelectPreference = {\n\t\tkey: `${entry.key}`,\n\t\tdefaultValue: entry.defaultValue !== undefined ? entry.defaultValue : null,\n\t\tdefaultLabel: cleanStickyLabel(entry.defaultLabel),\n\t\tmultiple: !!entry.multiple,\n\t\toptions: normalizeStickyOptions(entry.options),\n\t\tupdatedAt: entry.updatedAt\n\t};\n\n\treturn normalized;\n}\n\nfunction normalizeStickyOptions(options: any): StickySelectOption[] {\n\tif (Array.isArray(options)) {\n\t\treturn options\n\t\t\t.map(opt => normalizeStickyOption(opt))\n\t\t\t.filter(opt => !!opt) as StickySelectOption[];\n\t}\n\n\tif (options && typeof options === 'object') {\n\t\treturn Object.keys(options)\n\t\t\t.sort()\n\t\t\t.map(key => normalizeStickyOption(options[key]))\n\t\t\t.filter(opt => !!opt) as StickySelectOption[];\n\t}\n\n\treturn [];\n}\n\nfunction normalizeStickyOption(option: any): StickySelectOption | null {\n\tif (!option || option.value === undefined) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tvalue: option.value,\n\t\tlabel: cleanStickyLabel(option.label)\n\t};\n}\n\nfunction cleanStickyLabel(label: string | undefined): string {\n\tif (!label) {\n\t\treturn '';\n\t}\n\n\tconst trimmed = `${label}`.trim();\n\tif (!trimmed || trimmed.toLowerCase() === 'loading...') {\n\t\treturn '';\n\t}\n\n\treturn trimmed;\n}\n\nfunction buildOptionKey(value: any): string {\n\tif (value === null) {\n\t\treturn 'null';\n\t}\n\n\tif (value === undefined) {\n\t\treturn 'undefined';\n\t}\n\n\tif (typeof value === 'object') {\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t\tcatch {\n\t\t\treturn `${value}`;\n\t\t}\n\t}\n\n\treturn `${value}`;\n}\n\nfunction valuesMatch(a: any, b: any, multiple: boolean): boolean {\n\tif (multiple) {\n\t\tconst arrA = Array.isArray(a) ? a : [];\n\t\tconst arrB = Array.isArray(b) ? b : [];\n\n\t\tif (arrA.length !== arrB.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn arrA.every(item => arrB.some(candidate => buildOptionKey(candidate) === buildOptionKey(item)));\n\t}\n\n\treturn buildOptionKey(a) === buildOptionKey(b);\n}\nconst STICKY_MAX_OPTIONS = 200;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/methods/accounts.ts"],"names":[],"mappings":"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","file":"accounts.js","sourcesContent":["import * as handlebars from 'handlebars';\nimport * as jwt from 'jsonwebtoken';\nimport SimpleSchema from 'simpl-schema';\nimport { Users } from '../collections/user.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { StickySelectOption, StickySelectPreference, UserModel } from '../models/user.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, objectIdHexString } from '../util/common';\nimport { getDecryptedCustomerPortalPassword, isCustomerPortalUser, saveCustomerPortalPassword } from '../util/customer-portal-password';\nimport { ErrorReporter } from '../util/error-reporter';\n\nexport function loadAccountMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tincorrectUser: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\told_user: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tnew_user: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tclient_subs: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'client_subs.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(old_user, new_user, client_subs) {\n\t\t\t\tif (ResolveIOServer.getMainServer()) {\n\t\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWebSocketManager().getWebSocket(this.id_ws);\n\t\t\t\t\tconst correlationId = objectIdHexString();\n\t\t\t\t\tawait ErrorReporter.report({\n\t\t\t\t\t\tsourceApp: 'method-accounts',\n\t\t\t\t\t\tmessage: 'SERVER - WRONG USER Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tws,\n\t\t\t\t\t\t\tuserMethod: this.user,\n\t\t\t\t\t\t\tid_user: this.id_user,\n\t\t\t\t\t\t\tactiveSubs: ResolveIOServer.getMainServer().getSubscriptionManager().getActiveSubscriptions(),\n\t\t\t\t\t\t\told_user,\n\t\t\t\t\t\t\tnew_user,\n\t\t\t\t\t\t\tclient_subs\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tcontext: 'incorrectUser',\n\t\t\t\t\t\t\tcorrelationId\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcorrelationId\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn Promise.resolve(null);\n\t\t\t}\n\t\t},\n\t\treloadWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: async function(id_ws) {\n\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWebSocketManager().getWebSocket(id_ws);\n\n\t\t\t\tif (ws) {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('Error in Reload WS: No WS');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\treconnectWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: async function(id_ws) {\n\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWebSocketManager().getWebSocket(id_ws);\n\n\t\t\t\tif (ws) {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('Error in Reconnect WS: No WS');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdisconnectWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: async function(id_ws) {\n\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWebSocketManager().getWebSocket(id_ws);\n\n\t\t\t\tif (ws) {\n\t\t\t\t\tawait ResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('Error in Disconnect WS: No WS');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcreateUserAndEmailEnrollment: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tnewUser: {\n\t\t\t\t\ttype: Users['simplschema']\n\t\t\t\t},\n\t\t\t\tsendEnrollmentEmail: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(newUser: UserModel, sendEnrollmentEmail = true) {\n\t\t\t\tif (newUser.username.toLocaleLowerCase() === 'admin') {\n\t\t\t\t\tthrow new Error('Error in Create User And Email Enrollment: Username can not be admin');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet otherUser = await Users.findOne({\n\t\t\t\t\t\t$or: [\n\t\t\t\t\t\t\t{username: newUser.username.toLocaleLowerCase()},\n\t\t\t\t\t\t\t{email: newUser.email.toLocaleLowerCase()}\n\t\t\t\t\t\t]\n\t\t\t\t\t});\n\n\t\t\t\t\tif (otherUser) {\n\t\t\t\t\t\tthrow new Error('Error in Create User And Email Enrollment: Username/Email is already used');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tnewUser._id = objectIdHexString();\n\n\t\t\t\tnewUser.services = {\n\t\t\t\t\tenrollment: jwt.sign({id_user: newUser._id}, this.serverConfig['JWT_SECRET'], {\n\t\t\t\t\t\texpiresIn : 3 * 24 * 60 * 60 * 1000 // 3 days\n\t\t\t\t\t})\n\t\t\t\t};\n\n\t\t\t\tnewUser.is_customer = false;\n\t\t\t\tawait Users.insertOne(newUser);\n\n\t\t\t\tif (sendEnrollmentEmail) {\n\t\t\t\t\tlet emailData = {\n\t\t\t\t\t\tfullname: newUser.fullname,\n\t\t\t\t\t\tuser: this.user,\n\t\t\t\t\t\turl: (this.serverConfig['ROOT_URL'] + '/enroll-account?' + encodeURIComponent(this.serverConfig['SERVER_URL']) + '&' + newUser.services['enrollment'])\n\t\t\t\t\t};\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet html = this.readFile('email-templates/enrollment.html');\n\t\t\t\t\t\tlet template = handlebars.compile(html);\n\t\t\t\t\t\thandlebars.registerHelper('equals', (a, b) => {\n\t\t\t\t\t\t\treturn a === b;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tawait this.sendEmail(newUser.email, 'ResolveIO (' + ResolveIOServer.getClientName() + ') - Enrollment Email', '', template(emailData), null, null, '');\n\n\t\t\t\t\t\treturn newUser;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\terr.message = `Error in Create User And Email Enrollment: email-templates/enrollment.html - ${err.message}`;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn newUser;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresetUserPassword: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(userId: string) {\n\t\t\t\tlet user = await Users.findOne({_id: userId});\n\t\n\t\t\t\tif (user) {\n\t\t\t\t\tif (!user.services) {\n\t\t\t\t\t\tuser.services = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tuser.services['forgot_password'] = jwt.sign({id_user: userId}, this.serverConfig['JWT_SECRET']);\n\n\t\t\t\t\tlet emailData = {\n\t\t\t\t\t\tuserToChangePassword: user.fullname,\n\t\t\t\t\t\tuserWhoResetPassword: this.user,\n\t\t\t\t\t\turl: (this.serverConfig['ROOT_URL'] + '/forgot-password?' + encodeURIComponent(this.serverConfig['SERVER_URL']) + '&' + user.services['forgot_password'])\n\t\t\t\t\t};\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {services: user.services, attempts: 0}});\n\t\t\t\t\t\tlet html = this.readFile('email-templates/forgot-password.html');\n\t\t\t\t\t\tlet template = handlebars.compile(html);\n\t\t\t\t\t\thandlebars.registerHelper('equals', (a, b) => {\n\t\t\t\t\t\t\treturn a === b;\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\tawait this.sendEmail(user.email, 'ResolveIO (' + ResolveIOServer.getClientName() + ') - Forgot Password', '', template(emailData), null, null, '');\n\t\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\terr.message = `Error in Reset User Password: email-templates/forgot-password.html - ${err.message}`;\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthrow new Error('Error in Reset User Password: Invalid User');\n\t\t\t}\n\t\t},\n\t\tsetUserPassword: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpassword: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(userId: string, password: string) {\n\t\t\t\tlet user = await Users.findOne({_id: userId});\n\t\n\t\t\t\tif (user && !user.roles.super_admin) {\n\t\t\t\t\tawait Users.setPassword(user, password);\n\t\t\t\t\tawait saveCustomerPortalPassword(user, password, {\n\t\t\t\t\t\tupdatedByUserId: this.id_user,\n\t\t\t\t\t\tupdatedByUser: this.user\n\t\t\t\t\t});\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('Error in Set User Password: Invalid User');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetCustomerPortalUserPassword: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(userId: string) {\n\t\t\t\tconst methodUser = await resolveMethodUser(this.id_user, this.user);\n\t\t\t\tif (!canViewCustomerPortalPasswords(methodUser)) {\n\t\t\t\t\tthrow new Error('Error in Get Customer Portal User Password: Unauthorized');\n\t\t\t\t}\n\n\t\t\t\tconst targetUser = await Users.findOne({_id: userId});\n\t\t\t\tif (!targetUser) {\n\t\t\t\t\tthrow new Error('Error in Get Customer Portal User Password: Invalid User');\n\t\t\t\t}\n\n\t\t\t\tif (!isCustomerPortalUser(targetUser)) {\n\t\t\t\t\tthrow new Error('Error in Get Customer Portal User Password: User is not a customer portal user');\n\t\t\t\t}\n\n\t\t\t\tconst result = await getDecryptedCustomerPortalPassword(userId);\n\t\t\t\treturn {\n\t\t\t\t\tpassword: result.password,\n\t\t\t\t\tlast_set_at: result.lastSetAt || null\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tsaveUserStickySelects: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tstickySelects: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'stickySelects.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tid_user: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(stickySelects: any[], id_user?: string) {\n\t\t\t\tconst targetUserId = id_user || this.id_user;\n\t\t\t\tif (!targetUserId) {\n\t\t\t\t\tthrow new Error('Error in Save User Sticky Selects: Invalid User');\n\t\t\t\t}\n\n\t\t\t\tlet attempts = 0;\n\t\t\t\tlet mergedStickySelects: StickySelectPreference[] = [];\n\t\t\t\tlet nextVersion = 0;\n\n\t\t\t\twhile (attempts < 5) {\n\t\t\t\t\tconst user = await Users.findOne({_id: targetUserId});\n\t\t\t\t\tif (!user) {\n\t\t\t\t\t\tthrow new Error('Error in Save User Sticky Selects: Invalid User');\n\t\t\t\t\t}\n\n\t\t\t\t\tmergedStickySelects = mergeStickySelects(user.other?.stickySelects, stickySelects);\n\t\t\t\t\tconst nextUser: UserModel = deepCopy(user);\n\t\t\t\t\tnextUser.other = {...(nextUser.other || {}), stickySelects: mergedStickySelects};\n\n\t\t\t\t\tconst res: any = await Users.replaceOne({_id: nextUser._id, __v: user.__v} as any, nextUser, {}, false, false, user);\n\t\t\t\t\tif (res && res.modifiedCount) {\n\t\t\t\t\t\tnextVersion = (user.__v || 0) + 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tattempts += 1;\n\t\t\t\t}\n\n\t\t\t\tif (attempts >= 5) {\n\t\t\t\t\tthrow new Error('Error in Save User Sticky Selects: Could not acquire latest version');\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tstickySelects: mergedStickySelects,\n\t\t\t\t\t__v: nextVersion\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction mergeStickySelects(existingList: any, incomingList: StickySelectPreference[]): StickySelectPreference[] {\n\tconst existingMap = new Map<string, StickySelectPreference>();\n\n\tif (Array.isArray(existingList)) {\n\t\texistingList.forEach(entry => {\n\t\t\tconst normalized = normalizeStickyPreference(entry);\n\t\t\tif (normalized && normalized.key) {\n\t\t\t\texistingMap.set(normalized.key, normalized);\n\t\t\t}\n\t\t});\n\t}\n\n\tfor (let i = 0; i < incomingList.length; i++) {\n\t\tconst normalized = normalizeStickyPreference(incomingList[i]);\n\t\tif (!normalized || !normalized.key) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst prev = existingMap.get(normalized.key);\n\t\tconst mergedOptions = trimOptions(normalized.options && normalized.options.length\n\t\t\t? mergeOptions(prev?.options || [], normalized.options)\n\t\t\t: (prev?.options || []));\n\n\t\tlet defaultValue = normalized.defaultValue !== undefined ? normalized.defaultValue : (prev ? prev.defaultValue : null);\n\t\tif (defaultValue === undefined) {\n\t\t\tdefaultValue = null;\n\t\t}\n\n\t\tlet defaultLabel = cleanStickyLabel(normalized.defaultLabel);\n\t\tif (!defaultLabel && prev?.defaultLabel) {\n\t\t\tdefaultLabel = cleanStickyLabel(prev.defaultLabel);\n\t\t}\n\n\t\tif (defaultValue !== null && !defaultLabel) {\n\t\t\tconst optionLabel = mergedOptions.find(opt => valuesMatch(opt.value, defaultValue, !!normalized.multiple))?.label || '';\n\t\t\tdefaultLabel = cleanStickyLabel(optionLabel);\n\t\t}\n\n\t\texistingMap.set(normalized.key, {\n\t\t\tkey: normalized.key,\n\t\t\tdefaultValue,\n\t\t\tdefaultLabel,\n\t\t\tmultiple: normalized.multiple !== undefined ? normalized.multiple : !!prev?.multiple,\n\t\t\toptions: mergedOptions,\n\t\t\tupdatedAt: new Date().toISOString()\n\t\t});\n\t}\n\n\treturn Array.from(existingMap.values());\n}\n\nfunction mergeOptions(existing: StickySelectOption[], incoming: StickySelectOption[]): StickySelectOption[] {\n\tconst map = new Map<string, StickySelectOption>();\n\n\tnormalizeStickyOptions(existing).forEach(opt => {\n\t\tconst key = buildOptionKey(opt.value);\n\t\tmap.set(key, opt);\n\t});\n\n\tnormalizeStickyOptions(incoming).forEach(opt => {\n\t\tconst key = buildOptionKey(opt.value);\n\t\tmap.set(key, opt);\n\t});\n\n\treturn Array.from(map.values());\n}\n\nfunction trimOptions(options: StickySelectOption[]): StickySelectOption[] {\n\tif (!Array.isArray(options)) {\n\t\treturn [];\n\t}\n\n\tif (options.length <= STICKY_MAX_OPTIONS) {\n\t\treturn options;\n\t}\n\n\treturn options.slice(0, STICKY_MAX_OPTIONS);\n}\n\nfunction normalizeStickyPreference(entry: any): StickySelectPreference | null {\n\tif (!entry || !entry.key) {\n\t\treturn null;\n\t}\n\n\tconst normalized: StickySelectPreference = {\n\t\tkey: `${entry.key}`,\n\t\tdefaultValue: entry.defaultValue !== undefined ? entry.defaultValue : null,\n\t\tdefaultLabel: cleanStickyLabel(entry.defaultLabel),\n\t\tmultiple: !!entry.multiple,\n\t\toptions: normalizeStickyOptions(entry.options),\n\t\tupdatedAt: entry.updatedAt\n\t};\n\n\treturn normalized;\n}\n\nfunction normalizeStickyOptions(options: any): StickySelectOption[] {\n\tif (Array.isArray(options)) {\n\t\treturn options\n\t\t\t.map(opt => normalizeStickyOption(opt))\n\t\t\t.filter(opt => !!opt) as StickySelectOption[];\n\t}\n\n\tif (options && typeof options === 'object') {\n\t\treturn Object.keys(options)\n\t\t\t.sort()\n\t\t\t.map(key => normalizeStickyOption(options[key]))\n\t\t\t.filter(opt => !!opt) as StickySelectOption[];\n\t}\n\n\treturn [];\n}\n\nfunction normalizeStickyOption(option: any): StickySelectOption | null {\n\tif (!option || option.value === undefined) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tvalue: option.value,\n\t\tlabel: cleanStickyLabel(option.label)\n\t};\n}\n\nfunction cleanStickyLabel(label: string | undefined): string {\n\tif (!label) {\n\t\treturn '';\n\t}\n\n\tconst trimmed = `${label}`.trim();\n\tif (!trimmed || trimmed.toLowerCase() === 'loading...') {\n\t\treturn '';\n\t}\n\n\treturn trimmed;\n}\n\nfunction buildOptionKey(value: any): string {\n\tif (value === null) {\n\t\treturn 'null';\n\t}\n\n\tif (value === undefined) {\n\t\treturn 'undefined';\n\t}\n\n\tif (typeof value === 'object') {\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t\tcatch {\n\t\t\treturn `${value}`;\n\t\t}\n\t}\n\n\treturn `${value}`;\n}\n\nfunction valuesMatch(a: any, b: any, multiple: boolean): boolean {\n\tif (multiple) {\n\t\tconst arrA = Array.isArray(a) ? a : [];\n\t\tconst arrB = Array.isArray(b) ? b : [];\n\n\t\tif (arrA.length !== arrB.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn arrA.every(item => arrB.some(candidate => buildOptionKey(candidate) === buildOptionKey(item)));\n\t}\n\n\treturn buildOptionKey(a) === buildOptionKey(b);\n}\nconst STICKY_MAX_OPTIONS = 200;\n\nasync function resolveMethodUser(id_user?: string, username?: string): Promise<UserModel | null> {\n\tif (id_user) {\n\t\tconst userById = await Users.findById(id_user);\n\t\tif (userById) {\n\t\t\treturn userById;\n\t\t}\n\t}\n\n\tif (username) {\n\t\tconst userByUsername = await Users.findOne({username});\n\t\tif (userByUsername) {\n\t\t\treturn userByUsername;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction canViewCustomerPortalPasswords(user: UserModel | null): boolean {\n\tif (!user || !user.roles) {\n\t\treturn false;\n\t}\n\n\tif (user.roles.super_admin) {\n\t\treturn true;\n\t}\n\n\tconst groups = Array.isArray(user.roles.groups) ? user.roles.groups : [];\n\treturn groups.some(group => Array.isArray(group?.views) && group.views.includes('/admin/customer-user'));\n}\n"]}
|
package/methods/ai-terminal.js
CHANGED
|
@@ -1479,9 +1479,8 @@ function executeAiTerminalRun(payload, context) {
|
|
|
1479
1479
|
return [4 /*yield*/, resolveClientId(conversation, input.id_client, context === null || context === void 0 ? void 0 : context.id_user)];
|
|
1480
1480
|
case 18:
|
|
1481
1481
|
idClient = _b.sent();
|
|
1482
|
-
if (!idClient) return [3 /*break*/, 20];
|
|
1483
1482
|
return [4 /*yield*/, (0, openai_usage_ledger_manager_1.recordOpenAIUsage)({
|
|
1484
|
-
id_client: idClient,
|
|
1483
|
+
id_client: idClient || '',
|
|
1485
1484
|
model: codexModel || 'unknown',
|
|
1486
1485
|
input_tokens: usage.inputTokens,
|
|
1487
1486
|
output_tokens: usage.outputTokens,
|
|
@@ -1491,8 +1490,6 @@ function executeAiTerminalRun(payload, context) {
|
|
|
1491
1490
|
})];
|
|
1492
1491
|
case 19:
|
|
1493
1492
|
_b.sent();
|
|
1494
|
-
_b.label = 20;
|
|
1495
|
-
case 20:
|
|
1496
1493
|
userDoc = {
|
|
1497
1494
|
id_conversation: conversation._id,
|
|
1498
1495
|
role: 'user',
|
|
@@ -1517,20 +1514,20 @@ function executeAiTerminalRun(payload, context) {
|
|
|
1517
1514
|
updatedAt: now
|
|
1518
1515
|
};
|
|
1519
1516
|
return [4 /*yield*/, ai_terminal_message_collection_1.AiTerminalMessages.insertOne(userDoc)];
|
|
1520
|
-
case
|
|
1517
|
+
case 20:
|
|
1521
1518
|
_b.sent();
|
|
1522
1519
|
return [4 /*yield*/, ai_terminal_message_collection_1.AiTerminalMessages.insertOne(assistantDoc)];
|
|
1523
|
-
case
|
|
1520
|
+
case 21:
|
|
1524
1521
|
insertResult = _b.sent();
|
|
1525
1522
|
return [4 /*yield*/, touchConversation(conversation._id, now, insertResult._id)];
|
|
1526
|
-
case
|
|
1523
|
+
case 22:
|
|
1527
1524
|
_b.sent();
|
|
1528
|
-
if (!(input.delete_files_after_run !== false)) return [3 /*break*/,
|
|
1525
|
+
if (!(input.delete_files_after_run !== false)) return [3 /*break*/, 24];
|
|
1529
1526
|
return [4 /*yield*/, cleanupAttachments(attachmentData.attachments)];
|
|
1530
|
-
case
|
|
1527
|
+
case 23:
|
|
1531
1528
|
_b.sent();
|
|
1532
|
-
_b.label =
|
|
1533
|
-
case
|
|
1529
|
+
_b.label = 24;
|
|
1530
|
+
case 24: return [2 /*return*/, {
|
|
1534
1531
|
conversation: conversation,
|
|
1535
1532
|
message: assistantDoc,
|
|
1536
1533
|
usage: assistantDoc.usage
|
|
@@ -1591,9 +1588,8 @@ function executeAiFormPatch(payload, context) {
|
|
|
1591
1588
|
return [4 /*yield*/, resolveClientIdFromConfig(input.id_client, context === null || context === void 0 ? void 0 : context.id_user)];
|
|
1592
1589
|
case 2:
|
|
1593
1590
|
idClient = _b.sent();
|
|
1594
|
-
if (!idClient) return [3 /*break*/, 4];
|
|
1595
1591
|
return [4 /*yield*/, (0, openai_usage_ledger_manager_1.recordOpenAIUsage)({
|
|
1596
|
-
id_client: idClient,
|
|
1592
|
+
id_client: idClient || '',
|
|
1597
1593
|
model: codexModel || 'unknown',
|
|
1598
1594
|
input_tokens: usage.inputTokens,
|
|
1599
1595
|
output_tokens: usage.outputTokens,
|
|
@@ -1602,8 +1598,6 @@ function executeAiFormPatch(payload, context) {
|
|
|
1602
1598
|
})];
|
|
1603
1599
|
case 3:
|
|
1604
1600
|
_b.sent();
|
|
1605
|
-
_b.label = 4;
|
|
1606
|
-
case 4:
|
|
1607
1601
|
parsed = parseJsonObject(responseText);
|
|
1608
1602
|
if (!parsed || typeof parsed !== 'object') {
|
|
1609
1603
|
throw new Error('AI form patch response was not valid JSON.');
|
|
@@ -2968,12 +2962,11 @@ function executeAiAssistantCodexRun(payload, context) {
|
|
|
2968
2962
|
return [4 /*yield*/, resolveClientId(conversation, input.id_client, context === null || context === void 0 ? void 0 : context.id_user)];
|
|
2969
2963
|
case 72:
|
|
2970
2964
|
usageClientId = _22.sent();
|
|
2971
|
-
if (!usageClientId) return [3 /*break*/, 76];
|
|
2972
2965
|
_22.label = 73;
|
|
2973
2966
|
case 73:
|
|
2974
2967
|
_22.trys.push([73, 75, , 76]);
|
|
2975
2968
|
return [4 /*yield*/, (0, openai_usage_ledger_manager_1.recordOpenAIUsage)({
|
|
2976
|
-
id_client: usageClientId,
|
|
2969
|
+
id_client: usageClientId || '',
|
|
2977
2970
|
model: finalUsage.model,
|
|
2978
2971
|
input_tokens: finalUsage.input_tokens,
|
|
2979
2972
|
output_tokens: finalUsage.output_tokens,
|