@resolveio/server-lib 20.15.9 → 20.16.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.
@@ -1,4 +1,15 @@
1
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
+ };
2
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -65,6 +76,23 @@ exports.loadPublicationMethods = loadPublicationMethods;
65
76
  var resolveio_server_app_1 = require("../resolveio-server-app");
66
77
  var subscription_manager_1 = require("../managers/subscription.manager");
67
78
  var subscription_dependency_context_1 = require("../util/subscription-dependency-context");
79
+ function normalizeOptionalString(value) {
80
+ if (value === null || value === undefined) {
81
+ return '';
82
+ }
83
+ return String(value).trim();
84
+ }
85
+ function resolveSingleWorkerTarget(value) {
86
+ var normalized = normalizeOptionalString(value);
87
+ if (!normalized) {
88
+ return '';
89
+ }
90
+ var parts = normalized.split(',').map(function (part) { return part.trim(); }).filter(Boolean);
91
+ if (parts.length !== 1) {
92
+ return '';
93
+ }
94
+ return parts[0];
95
+ }
68
96
  function normalizeSubscriptionData(subscriptionData) {
69
97
  if (!Array.isArray(subscriptionData)) {
70
98
  return [];
@@ -85,13 +113,14 @@ function getPublication(manager, publication) {
85
113
  return pub;
86
114
  }
87
115
  function loadPublicationMethods(methodManager) {
116
+ var publicationWorkerIndex = resolveSingleWorkerTarget(process.env.SUBSCRIPTION_WORKER_INDEX
117
+ || process.env.PUBLICATION_WORKER_INDEX
118
+ || process.env.WORKER_PUBLICATION_INDEX);
119
+ var publicationWorkerInstance = resolveSingleWorkerTarget(process.env.SUBSCRIPTION_WORKER_INSTANCE
120
+ || process.env.PUBLICATION_WORKER_INSTANCE
121
+ || process.env.WORKER_PUBLICATION_INSTANCE);
88
122
  methodManager.methods({
89
- runPublication: {
90
- skipValidation: true,
91
- workerTaskWeight: parseInt(process.env.SUBSCRIPTION_WORKER_TASK_WEIGHT || '', 10) || 1,
92
- maxConcurrency: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY || '', 10) || undefined,
93
- maxConcurrencyPerInstance: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY_PER_INSTANCE || '', 10) || undefined,
94
- function: function (publication_1) {
123
+ runPublication: __assign(__assign(__assign({ skipValidation: true, workerTaskWeight: parseInt(process.env.SUBSCRIPTION_WORKER_TASK_WEIGHT || '', 10) || 1, maxConcurrency: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY || '', 10) || undefined, maxConcurrencyPerInstance: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY_PER_INSTANCE || '', 10) || undefined, workerQueue: 'publication' }, (publicationWorkerIndex ? { targetWorkerIndex: publicationWorkerIndex } : {})), (publicationWorkerInstance ? { targetWorkerInstance: publicationWorkerInstance } : {})), { function: function (publication_1) {
95
124
  return __awaiter(this, arguments, void 0, function (publication, subscriptionData, userId) {
96
125
  var manager, pub, normalizedData, context, valObj, valKeys, rootKeys, i, metadata, execution, _a, response;
97
126
  if (subscriptionData === void 0) { subscriptionData = []; }
@@ -147,8 +176,7 @@ function loadPublicationMethods(methodManager) {
147
176
  }
148
177
  });
149
178
  });
150
- }
151
- }
179
+ } })
152
180
  });
153
181
  }
154
182
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/methods/publications.ts"],"names":[],"mappings":"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","file":"publications.js","sourcesContent":["import { ResolveIOServer } from '../resolveio-server-app';\nimport { SubscriptionManager } from '../managers/subscription.manager';\nimport { SubscriptionPubModel } from '../models/subscription.model';\nimport { serializeDependencySnapshot, withDependencyTracking } from '../util/subscription-dependency-context';\n\ninterface PublicationWorkerResponse {\n\t__publicationResponse: true;\n\tpublication: string;\n\tsubscriptionData: any[];\n\tuserSpecific: boolean;\n\tpayload: any;\n\tsnapshot: ReturnType<typeof serializeDependencySnapshot>;\n}\n\nfunction normalizeSubscriptionData(subscriptionData: any[]): any[] {\n\tif (!Array.isArray(subscriptionData)) {\n\t\treturn [];\n\t}\n\n\treturn subscriptionData;\n}\n\nfunction resolvePublicationContext(manager: SubscriptionManager) {\n\treturn Object.assign({}, manager, SubscriptionManager.prototype);\n}\n\nfunction getPublication(manager: SubscriptionManager, publication: string): SubscriptionPubModel {\n\tif (!manager || typeof manager.getPublication !== 'function') {\n\t\tthrow new Error(`Subscription manager not available for publication: ${publication}`);\n\t}\n\n\tconst pub = manager.getPublication(publication);\n\tif (!pub) {\n\t\tthrow new Error(`Publication not found: ${publication}`);\n\t}\n\n\treturn pub;\n}\n\nexport function loadPublicationMethods(methodManager) {\n\tmethodManager.methods({\n\t\trunPublication: {\n\t\t\tskipValidation: true,\n\t\t\tworkerTaskWeight: parseInt(process.env.SUBSCRIPTION_WORKER_TASK_WEIGHT || '', 10) || 1,\n\t\t\tmaxConcurrency: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY || '', 10) || undefined,\n\t\t\tmaxConcurrencyPerInstance: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY_PER_INSTANCE || '', 10) || undefined,\n\t\t\tfunction: async function(publication: string, subscriptionData: any[] = [], userId?: string) {\n\t\t\t\tif (this.user && this.user !== 'Internal System') {\n\t\t\t\t\tthrow new Error('Unauthorized publication execution');\n\t\t\t\t}\n\n\t\t\t\tconst manager = ResolveIOServer.getMainServer().getSubscriptionManager();\n\t\t\t\tconst pub = getPublication(manager, publication);\n\t\t\t\tconst normalizedData = normalizeSubscriptionData(subscriptionData);\n\t\t\t\tconst context = resolvePublicationContext(manager);\n\n\t\t\t\tif (pub.check && pub.check._schema && (normalizedData.length > 1 || normalizedData[0])) {\n\t\t\t\t\tconst valObj = {};\n\t\t\t\t\tconst valKeys = Object.keys(pub.check._schema);\n\t\t\t\t\tconst rootKeys = valKeys.filter(a => !a.includes('.'));\n\t\t\t\t\tfor (let i = 0; i < normalizedData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = normalizedData[i];\n\t\t\t\t\t}\n\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t}\n\n\t\t\t\tconst metadata = {\n\t\t\t\t\tpublication,\n\t\t\t\t\tsubscriptionData: normalizedData\n\t\t\t\t};\n\n\t\t\t\tconst execution = pub.user_specific\n\t\t\t\t\t? await withDependencyTracking(\n\t\t\t\t\t\t() => pub.function.call(context, userId || '', ...normalizedData),\n\t\t\t\t\t\tObject.assign({}, metadata, { userId })\n\t\t\t\t\t)\n\t\t\t\t\t: await withDependencyTracking(\n\t\t\t\t\t\t() => pub.function.call(context, ...normalizedData),\n\t\t\t\t\t\tmetadata\n\t\t\t\t\t);\n\n\t\t\t\tconst response: PublicationWorkerResponse = {\n\t\t\t\t\t__publicationResponse: true,\n\t\t\t\t\tpublication,\n\t\t\t\t\tsubscriptionData: normalizedData,\n\t\t\t\t\tuserSpecific: !!pub.user_specific,\n\t\t\t\t\tpayload: execution.result,\n\t\t\t\t\tsnapshot: serializeDependencySnapshot(execution.snapshot)\n\t\t\t\t};\n\n\t\t\t\treturn response;\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
1
+ {"version":3,"sources":["../../src/methods/publications.ts"],"names":[],"mappings":"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","file":"publications.js","sourcesContent":["import { ResolveIOServer } from '../resolveio-server-app';\nimport { SubscriptionManager } from '../managers/subscription.manager';\nimport { SubscriptionPubModel } from '../models/subscription.model';\nimport { serializeDependencySnapshot, withDependencyTracking } from '../util/subscription-dependency-context';\n\ninterface PublicationWorkerResponse {\n\t__publicationResponse: true;\n\tpublication: string;\n\tsubscriptionData: any[];\n\tuserSpecific: boolean;\n\tpayload: any;\n\tsnapshot: ReturnType<typeof serializeDependencySnapshot>;\n}\n\nfunction normalizeOptionalString(value: any): string {\n\tif (value === null || value === undefined) {\n\t\treturn '';\n\t}\n\treturn String(value).trim();\n}\n\nfunction resolveSingleWorkerTarget(value: any): string {\n\tconst normalized = normalizeOptionalString(value);\n\tif (!normalized) {\n\t\treturn '';\n\t}\n\tconst parts = normalized.split(',').map(part => part.trim()).filter(Boolean);\n\tif (parts.length !== 1) {\n\t\treturn '';\n\t}\n\treturn parts[0];\n}\n\nfunction normalizeSubscriptionData(subscriptionData: any[]): any[] {\n\tif (!Array.isArray(subscriptionData)) {\n\t\treturn [];\n\t}\n\n\treturn subscriptionData;\n}\n\nfunction resolvePublicationContext(manager: SubscriptionManager) {\n\treturn Object.assign({}, manager, SubscriptionManager.prototype);\n}\n\nfunction getPublication(manager: SubscriptionManager, publication: string): SubscriptionPubModel {\n\tif (!manager || typeof manager.getPublication !== 'function') {\n\t\tthrow new Error(`Subscription manager not available for publication: ${publication}`);\n\t}\n\n\tconst pub = manager.getPublication(publication);\n\tif (!pub) {\n\t\tthrow new Error(`Publication not found: ${publication}`);\n\t}\n\n\treturn pub;\n}\n\nexport function loadPublicationMethods(methodManager) {\n\tconst publicationWorkerIndex = resolveSingleWorkerTarget(\n\t\tprocess.env.SUBSCRIPTION_WORKER_INDEX\n\t\t|| process.env.PUBLICATION_WORKER_INDEX\n\t\t|| process.env.WORKER_PUBLICATION_INDEX\n\t);\n\tconst publicationWorkerInstance = resolveSingleWorkerTarget(\n\t\tprocess.env.SUBSCRIPTION_WORKER_INSTANCE\n\t\t|| process.env.PUBLICATION_WORKER_INSTANCE\n\t\t|| process.env.WORKER_PUBLICATION_INSTANCE\n\t);\n\tmethodManager.methods({\n\t\trunPublication: {\n\t\t\tskipValidation: true,\n\t\t\tworkerTaskWeight: parseInt(process.env.SUBSCRIPTION_WORKER_TASK_WEIGHT || '', 10) || 1,\n\t\t\tmaxConcurrency: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY || '', 10) || undefined,\n\t\t\tmaxConcurrencyPerInstance: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY_PER_INSTANCE || '', 10) || undefined,\n\t\t\tworkerQueue: 'publication',\n\t\t\t...(publicationWorkerIndex ? { targetWorkerIndex: publicationWorkerIndex } : {}),\n\t\t\t...(publicationWorkerInstance ? { targetWorkerInstance: publicationWorkerInstance } : {}),\n\t\t\tfunction: async function(publication: string, subscriptionData: any[] = [], userId?: string) {\n\t\t\t\tif (this.user && this.user !== 'Internal System') {\n\t\t\t\t\tthrow new Error('Unauthorized publication execution');\n\t\t\t\t}\n\n\t\t\t\tconst manager = ResolveIOServer.getMainServer().getSubscriptionManager();\n\t\t\t\tconst pub = getPublication(manager, publication);\n\t\t\t\tconst normalizedData = normalizeSubscriptionData(subscriptionData);\n\t\t\t\tconst context = resolvePublicationContext(manager);\n\n\t\t\t\tif (pub.check && pub.check._schema && (normalizedData.length > 1 || normalizedData[0])) {\n\t\t\t\t\tconst valObj = {};\n\t\t\t\t\tconst valKeys = Object.keys(pub.check._schema);\n\t\t\t\t\tconst rootKeys = valKeys.filter(a => !a.includes('.'));\n\t\t\t\t\tfor (let i = 0; i < normalizedData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = normalizedData[i];\n\t\t\t\t\t}\n\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t}\n\n\t\t\t\tconst metadata = {\n\t\t\t\t\tpublication,\n\t\t\t\t\tsubscriptionData: normalizedData\n\t\t\t\t};\n\n\t\t\t\tconst execution = pub.user_specific\n\t\t\t\t\t? await withDependencyTracking(\n\t\t\t\t\t\t() => pub.function.call(context, userId || '', ...normalizedData),\n\t\t\t\t\t\tObject.assign({}, metadata, { userId })\n\t\t\t\t\t)\n\t\t\t\t\t: await withDependencyTracking(\n\t\t\t\t\t\t() => pub.function.call(context, ...normalizedData),\n\t\t\t\t\t\tmetadata\n\t\t\t\t\t);\n\n\t\t\t\tconst response: PublicationWorkerResponse = {\n\t\t\t\t\t__publicationResponse: true,\n\t\t\t\t\tpublication,\n\t\t\t\t\tsubscriptionData: normalizedData,\n\t\t\t\t\tuserSpecific: !!pub.user_specific,\n\t\t\t\t\tpayload: execution.result,\n\t\t\t\t\tsnapshot: serializeDependencySnapshot(execution.snapshot)\n\t\t\t\t};\n\n\t\t\t\treturn response;\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
@@ -14,6 +14,7 @@ export interface MethodAllModel {
14
14
  workerTaskWeight?: number;
15
15
  skipWorker?: boolean;
16
16
  forceWorker?: boolean;
17
+ workerQueue?: 'publication' | 'codex' | 'default';
17
18
  targetWorkerIndex?: string | number;
18
19
  targetWorkerInstance?: string | number;
19
20
  bypassSession?: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/method.model.ts"],"names":[],"mappings":"","file":"method.model.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\n\nexport interface MethodModel {\n\t[key: string]: MethodAllModel;\n}\n\nexport interface MethodAllModel {\n\tcheck?: SimpleSchema;\n\t// eslint-disable-next-line no-unused-vars\n\tfunction: (this: MethodManager & {id_ws: string, id_user: string, user: string}, ...parameters: any[]) => Promise<any | any[]>;\n\tskipValidation?: boolean;\n\tworkerTaskWeight?: number;\n\tskipWorker?: boolean;\n\tforceWorker?: boolean;\n\ttargetWorkerIndex?: string | number;\n\ttargetWorkerInstance?: string | number;\n\tbypassSession?: boolean;\n\ttimeoutOverride?: number;\n\tmaxConcurrency?: number;\n\tmaxConcurrencyPerInstance?: number;\n}\n"]}
1
+ {"version":3,"sources":["../../src/models/method.model.ts"],"names":[],"mappings":"","file":"method.model.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\n\nexport interface MethodModel {\n\t[key: string]: MethodAllModel;\n}\n\nexport interface MethodAllModel {\n\tcheck?: SimpleSchema;\n\t// eslint-disable-next-line no-unused-vars\n\tfunction: (this: MethodManager & {id_ws: string, id_user: string, user: string}, ...parameters: any[]) => Promise<any | any[]>;\n\tskipValidation?: boolean;\n\tworkerTaskWeight?: number;\n\tskipWorker?: boolean;\n\tforceWorker?: boolean;\n\tworkerQueue?: 'publication' | 'codex' | 'default';\n\ttargetWorkerIndex?: string | number;\n\ttargetWorkerInstance?: string | number;\n\tbypassSession?: boolean;\n\ttimeoutOverride?: number;\n\tmaxConcurrency?: number;\n\tmaxConcurrencyPerInstance?: number;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "20.15.9",
3
+ "version": "20.16.0",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",
package/server-app.d.ts CHANGED
@@ -102,6 +102,10 @@ export declare class ResolveIOMainServer {
102
102
  private resolveTimerDebugMinDelayMs;
103
103
  private resolveTimerDebugSampleRate;
104
104
  private resolveTimerDebugLogLimit;
105
+ private normalizeWorkerSelectorValue;
106
+ private parseWorkerSelector;
107
+ private workerMatchesSelector;
108
+ private resolveWorkerRole;
105
109
  private parsePositiveInt;
106
110
  private parsePositiveFloat;
107
111
  private startPerfDebug;
package/server-app.js CHANGED
@@ -162,7 +162,7 @@ var ResolveIOMainServer = /** @class */ (function () {
162
162
  };
163
163
  ResolveIOMainServer.prototype.initialize = function () {
164
164
  return __awaiter(this, void 0, void 0, function () {
165
- var _a;
165
+ var _a, workerRole, workerIndex, workerInstance;
166
166
  var _this = this;
167
167
  return __generator(this, function (_b) {
168
168
  switch (_b.label) {
@@ -392,7 +392,10 @@ var ResolveIOMainServer = /** @class */ (function () {
392
392
  }
393
393
  if (this._isWorkersEnabled) {
394
394
  if (this._isWorkerInstance) {
395
- console.log('Running as a Worker instance', process.env.NODE_APP_INSTANCE);
395
+ workerRole = this.resolveWorkerRole();
396
+ workerIndex = this.normalizeWorkerSelectorValue(process.env.WORKER_INDEX) || 'UNKNOWN';
397
+ workerInstance = this.normalizeWorkerSelectorValue(process.env.NODE_APP_INSTANCE) || 'UNKNOWN';
398
+ console.log("Running as Worker: ".concat(workerRole), workerIndex, workerInstance);
396
399
  this._methodManager = method_manager_1.MethodManager.create(null, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);
397
400
  this._subscriptionManager = subscription_manager_1.SubscriptionManager.createPublicationRegistry(resolveio_server_app_1.ResolveIOServer.getServerConfig());
398
401
  this._workerServerManager = worker_server_manager_1.WorkerServerManager.create(this._methodManager, this.getServerConfig());
@@ -1310,6 +1313,55 @@ var ResolveIOMainServer = /** @class */ (function () {
1310
1313
  var raw = (_a = process.env.TIMER_DEBUG_LOG_LIMIT) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['TIMER_DEBUG_LOG_LIMIT'];
1311
1314
  return this.parsePositiveInt(raw, this._timerDebugLogLimit);
1312
1315
  };
1316
+ ResolveIOMainServer.prototype.normalizeWorkerSelectorValue = function (value) {
1317
+ if (value === null || value === undefined) {
1318
+ return null;
1319
+ }
1320
+ var normalized = String(value).trim();
1321
+ return normalized.length ? normalized : null;
1322
+ };
1323
+ ResolveIOMainServer.prototype.parseWorkerSelector = function (value) {
1324
+ if (value === null || value === undefined) {
1325
+ return null;
1326
+ }
1327
+ var raw = Array.isArray(value) ? value.join(',') : String(value);
1328
+ var parts = raw.split(',').map(function (part) { return part.trim(); }).filter(Boolean);
1329
+ if (!parts.length) {
1330
+ return null;
1331
+ }
1332
+ return new Set(parts);
1333
+ };
1334
+ ResolveIOMainServer.prototype.workerMatchesSelector = function (workerIndex, workerInstance, indexes, instances) {
1335
+ if (!indexes && !instances) {
1336
+ return false;
1337
+ }
1338
+ var indexMatch = indexes ? (workerIndex ? indexes.has(workerIndex) : false) : true;
1339
+ var instanceMatch = instances ? (workerInstance ? instances.has(workerInstance) : false) : true;
1340
+ return indexMatch && instanceMatch;
1341
+ };
1342
+ ResolveIOMainServer.prototype.resolveWorkerRole = function () {
1343
+ var workerIndex = this.normalizeWorkerSelectorValue(process.env.WORKER_INDEX);
1344
+ var workerInstance = this.normalizeWorkerSelectorValue(process.env.NODE_APP_INSTANCE);
1345
+ var publicationIndexes = this.parseWorkerSelector(process.env.PUBLICATION_WORKER_INDEX
1346
+ || process.env.SUBSCRIPTION_WORKER_INDEX
1347
+ || process.env.WORKER_PUBLICATION_INDEX);
1348
+ var publicationInstances = this.parseWorkerSelector(process.env.PUBLICATION_WORKER_INSTANCE
1349
+ || process.env.SUBSCRIPTION_WORKER_INSTANCE
1350
+ || process.env.WORKER_PUBLICATION_INSTANCE);
1351
+ var codexIndexes = this.parseWorkerSelector(process.env.AI_ASSISTANT_CODEX_WORKER_INDEX
1352
+ || process.env.CODEX_WORKER_INDEX
1353
+ || process.env.WORKER_CODEX_INDEX);
1354
+ var codexInstances = this.parseWorkerSelector(process.env.AI_ASSISTANT_CODEX_WORKER_INSTANCE
1355
+ || process.env.CODEX_WORKER_INSTANCE
1356
+ || process.env.WORKER_CODEX_INSTANCE);
1357
+ if (this.workerMatchesSelector(workerIndex, workerInstance, publicationIndexes, publicationInstances)) {
1358
+ return 'Subscription';
1359
+ }
1360
+ if (this.workerMatchesSelector(workerIndex, workerInstance, codexIndexes, codexInstances)) {
1361
+ return 'Codex';
1362
+ }
1363
+ return 'Other';
1364
+ };
1313
1365
  ResolveIOMainServer.prototype.parsePositiveInt = function (value, fallback) {
1314
1366
  var parsed = parseInt(value !== null && value !== void 0 ? value : '', 10);
1315
1367
  if (Number.isNaN(parsed) || parsed <= 0) {