@harperfast/harper-pro 5.0.5 → 5.0.6

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.
Files changed (107) hide show
  1. package/core/bin/status.js +2 -2
  2. package/core/bin/stop.js +5 -6
  3. package/core/components/EntryHandler.ts +4 -2
  4. package/core/components/Scope.ts +1 -1
  5. package/core/components/componentLoader.ts +11 -4
  6. package/core/components/requestRestart.ts +17 -2
  7. package/core/dataLayer/harperBridge/TableSizeObject.ts +35 -0
  8. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.ts +24 -0
  9. package/core/package-lock.json +1020 -101
  10. package/core/resources/DatabaseTransaction.ts +8 -3
  11. package/core/resources/Table.ts +12 -17
  12. package/core/resources/databases.ts +2 -2
  13. package/core/resources/graphql.ts +163 -165
  14. package/core/resources/indexes/HierarchicalNavigableSmallWorld.ts +14 -3
  15. package/core/resources/indexes/vector.ts +17 -0
  16. package/core/resources/loadEnv.ts +20 -16
  17. package/core/resources/login.ts +4 -3
  18. package/core/resources/roles.ts +60 -65
  19. package/core/security/auth.ts +15 -14
  20. package/core/security/jsLoader.ts +27 -9
  21. package/core/server/REST.ts +10 -11
  22. package/core/server/fastifyRoutes.ts +30 -29
  23. package/core/server/graphqlQuerying.ts +4 -3
  24. package/core/server/http.ts +175 -1
  25. package/core/server/mqtt.ts +8 -2
  26. package/core/server/serverHelpers/serverUtilities.ts +2 -5
  27. package/core/server/threads/threadServer.js +30 -2
  28. package/core/server/throttle.ts +18 -0
  29. package/core/utility/environment/environmentManager.js +10 -4
  30. package/core/utility/environment/systemInformation.ts +698 -0
  31. package/core/utility/hdbTerms.ts +1 -0
  32. package/core/utility/operation_authorization.js +2 -5
  33. package/dist/core/bin/status.js +2 -2
  34. package/dist/core/bin/status.js.map +1 -1
  35. package/dist/core/bin/stop.js +5 -5
  36. package/dist/core/bin/stop.js.map +1 -1
  37. package/dist/core/components/EntryHandler.js +4 -2
  38. package/dist/core/components/EntryHandler.js.map +1 -1
  39. package/dist/core/components/Scope.js +1 -1
  40. package/dist/core/components/Scope.js.map +1 -1
  41. package/dist/core/components/componentLoader.js +11 -3
  42. package/dist/core/components/componentLoader.js.map +1 -1
  43. package/dist/core/components/requestRestart.js +12 -1
  44. package/dist/core/components/requestRestart.js.map +1 -1
  45. package/dist/core/dataLayer/harperBridge/TableSizeObject.js +32 -0
  46. package/dist/core/dataLayer/harperBridge/TableSizeObject.js.map +1 -0
  47. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +18 -19
  48. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js.map +1 -1
  49. package/dist/core/resources/DatabaseTransaction.js +6 -1
  50. package/dist/core/resources/DatabaseTransaction.js.map +1 -1
  51. package/dist/core/resources/Table.js +14 -18
  52. package/dist/core/resources/Table.js.map +1 -1
  53. package/dist/core/resources/databases.js +2 -1
  54. package/dist/core/resources/databases.js.map +1 -1
  55. package/dist/core/resources/graphql.js +176 -176
  56. package/dist/core/resources/graphql.js.map +1 -1
  57. package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js +14 -2
  58. package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
  59. package/dist/core/resources/indexes/vector.js +14 -0
  60. package/dist/core/resources/indexes/vector.js.map +1 -1
  61. package/dist/core/resources/loadEnv.js +20 -17
  62. package/dist/core/resources/loadEnv.js.map +1 -1
  63. package/dist/core/resources/login.js +4 -4
  64. package/dist/core/resources/login.js.map +1 -1
  65. package/dist/core/resources/roles.js +64 -68
  66. package/dist/core/resources/roles.js.map +1 -1
  67. package/dist/core/security/auth.js +17 -15
  68. package/dist/core/security/auth.js.map +1 -1
  69. package/dist/core/security/jsLoader.js +29 -9
  70. package/dist/core/security/jsLoader.js.map +1 -1
  71. package/dist/core/server/REST.js +11 -11
  72. package/dist/core/server/REST.js.map +1 -1
  73. package/dist/core/server/fastifyRoutes.js +30 -29
  74. package/dist/core/server/fastifyRoutes.js.map +1 -1
  75. package/dist/core/server/graphqlQuerying.js +5 -4
  76. package/dist/core/server/graphqlQuerying.js.map +1 -1
  77. package/dist/core/server/http.js +179 -0
  78. package/dist/core/server/http.js.map +1 -1
  79. package/dist/core/server/mqtt.js +5 -3
  80. package/dist/core/server/mqtt.js.map +1 -1
  81. package/dist/core/server/serverHelpers/serverUtilities.js +2 -2
  82. package/dist/core/server/serverHelpers/serverUtilities.js.map +1 -1
  83. package/dist/core/server/threads/threadServer.js +26 -2
  84. package/dist/core/server/threads/threadServer.js.map +1 -1
  85. package/dist/core/server/throttle.js +17 -0
  86. package/dist/core/server/throttle.js.map +1 -1
  87. package/dist/core/utility/environment/environmentManager.js +9 -4
  88. package/dist/core/utility/environment/environmentManager.js.map +1 -1
  89. package/dist/core/utility/environment/systemInformation.js +359 -219
  90. package/dist/core/utility/environment/systemInformation.js.map +1 -1
  91. package/dist/core/utility/hdbTerms.js +1 -0
  92. package/dist/core/utility/hdbTerms.js.map +1 -1
  93. package/dist/core/utility/operation_authorization.js +2 -2
  94. package/dist/core/utility/operation_authorization.js.map +1 -1
  95. package/dist/licensing/usageLicensing.js +1 -1
  96. package/dist/licensing/usageLicensing.js.map +1 -1
  97. package/licensing/usageLicensing.ts +1 -1
  98. package/npm-shrinkwrap.json +982 -62
  99. package/package.json +2 -1
  100. package/studio/web/assets/{index-D07pIqJt.js → index-qbLPhOzw.js} +2 -2
  101. package/studio/web/assets/{index-D07pIqJt.js.map → index-qbLPhOzw.js.map} +1 -1
  102. package/studio/web/index.html +1 -1
  103. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +0 -25
  104. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +0 -34
  105. package/core/utility/environment/systemInformation.js +0 -355
  106. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +0 -24
  107. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js.map +0 -1
@@ -2,7 +2,8 @@
2
2
 
3
3
  const { isMainThread, parentPort, threadId, workerData } = require('node:worker_threads');
4
4
  const { createServer: createSocketServer } = require('node:net');
5
- const { unlinkSync, existsSync } = require('fs');
5
+ const { unlinkSync, existsSync, mkdirSync } = require('fs');
6
+ const { join } = require('path');
6
7
  let componentsLoadedResolve;
7
8
  exports.whenComponentsLoaded = new Promise((resolve) => {
8
9
  componentsLoadedResolve = resolve;
@@ -144,6 +145,8 @@ function startServers() {
144
145
  }, 5000).unref();
145
146
  });
146
147
  }
148
+ // Clean up per-thread UDS socket and metadata files
149
+ httpComponent.cleanupUdsFiles();
147
150
  if (debugThreads || process.env.DEV_MODE) {
148
151
  try {
149
152
  require('inspector').close();
@@ -172,6 +175,8 @@ function startServers() {
172
175
  });
173
176
  });
174
177
  componentsLoadedResolve(loaded);
178
+ // Clean up UDS files on unexpected process exit
179
+ process.on('exit', () => httpComponent.cleanupUdsFiles());
175
180
  return loaded;
176
181
  }
177
182
  function listenOnPorts() {
@@ -180,7 +185,7 @@ function listenOnPorts() {
180
185
  const server = SERVERS[port];
181
186
 
182
187
  // If server is unix domain socket
183
- if (port.includes?.('/') && getWorkerIndex() == 0) {
188
+ if (port.includes?.('/')) {
184
189
  if (existsSync(port)) unlinkSync(port);
185
190
  listening.push(
186
191
  new Promise((resolve, reject) => {
@@ -265,6 +270,29 @@ function onSocket(listener, options) {
265
270
  );
266
271
  SNICallback.initialize(socketServer);
267
272
  SERVERS[options.securePort] = socketServer;
273
+
274
+ // Create a corresponding Unix Domain Socket mirror for the secure socket
275
+ if (env.get(terms.CONFIG_PARAMS.TLS_UNIXDOMAINSOCKETS)) {
276
+ const socketsDir = join(env.getHdbBasePath(), 'sockets');
277
+ mkdirSync(socketsDir, { recursive: true });
278
+ const socketName = `${getWorkerIndex()}-${options.securePort}`;
279
+ const udsPath = join(socketsDir, `${socketName}.sock`);
280
+ const yamlPath = join(socketsDir, `${socketName}.yaml`);
281
+
282
+ const udsServer = createSocketServer(listener, {
283
+ noDelay: true,
284
+ keepAlive: true,
285
+ keepAliveInitialDelay: 600,
286
+ });
287
+
288
+ udsServer.isPerThreadSocket = true;
289
+ SERVERS[udsPath] = udsServer;
290
+ httpComponent.registerUdsCleanupPaths(udsPath, yamlPath);
291
+
292
+ const writeMetadata = () => httpComponent.writeUdsMetadata(yamlPath, options.securePort, socketServer);
293
+ SNICallback.ready.then(writeMetadata);
294
+ socketServer.secureContextsListeners.push(writeMetadata);
295
+ }
268
296
  }
269
297
  if (options.port) {
270
298
  setPortServerMap(options.port, { protocol_name: 'TCP', name: getComponentName() });
@@ -1,4 +1,5 @@
1
1
  import { logger } from '../utility/logging/logger.ts';
2
+ import { Session, url as inspectorURL } from 'node:inspector';
2
3
  const MAX_EVENT_DELAY_TIME = 3000;
3
4
  const DEFAULT_MAX_QUEUE_TIME = 20_000; // 20 seconds
4
5
  let lastWarning = 0;
@@ -71,3 +72,20 @@ setInterval(() => {
71
72
  }
72
73
  lastEventQueueCheck = now;
73
74
  }, EVENT_QUEUE_MONITORING_INTERVAL).unref();
75
+
76
+ // Reset lastEventQueueCheck if we are resuming from the debugger
77
+ // so the event loop lag check ignores breakpoint pauses
78
+ setTimeout(() => {
79
+ // wait for any debugger to register and then see if the inspector/debugger is actually enabled
80
+ if (inspectorURL()) {
81
+ const session = new Session();
82
+ session.connect();
83
+ session.post('Debugger.enable');
84
+ session.on('inspectorNotification', ({ method }) => {
85
+ if (method === 'Debugger.resumed') {
86
+ // reset if we are resuming
87
+ lastEventQueueCheck = performance.now();
88
+ }
89
+ });
90
+ }
91
+ }, 1);
@@ -152,16 +152,22 @@ function initTestEnvironment(testConfigObj = {}) {
152
152
  // __dirname is dist/utility/environment when running tests, so go up 3 levels to reach project root
153
153
  const propsPath = path.join(__dirname, '../../../', 'unitTests');
154
154
  installProps[BOOT_PROPS_FILE_PATH] = path.join(propsPath, 'hdb_boot_properties.file');
155
+ const TEST_HDB_PATH = path.join(propsPath, 'envDir', process.pid.toString());
155
156
  try {
156
- mkdirSync(path.join(propsPath, 'envDir'));
157
+ mkdirSync(TEST_HDB_PATH, { recursive: true });
157
158
  } catch {}
158
159
  setProperty(hdbTerms.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY, path.join(propsPath, 'settings.test'));
159
160
  setProperty(hdbTerms.HDB_SETTINGS_NAMES.INSTALL_USER, os.userInfo() ? os.userInfo().username : undefined);
160
161
  setProperty(hdbTerms.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY, `debug`);
161
- setProperty(hdbTerms.HDB_SETTINGS_NAMES.LOG_PATH_KEY, path.join(propsPath, 'envDir', 'log'));
162
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.LOG_PATH_KEY, path.join(TEST_HDB_PATH, 'log'));
162
163
  setProperty(hdbTerms.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY, false);
163
- setProperty(hdbTerms.HDB_SETTINGS_NAMES.HDB_ROOT_KEY, path.join(propsPath, 'envDir'));
164
- setProperty(hdbTerms.CONFIG_PARAMS.STORAGE_PATH, path.join(propsPath, 'envDir'));
164
+ setProperty(hdbTerms.HDB_SETTINGS_NAMES.HDB_ROOT_KEY, TEST_HDB_PATH);
165
+ setProperty(hdbTerms.CONFIG_PARAMS.STORAGE_PATH, TEST_HDB_PATH);
166
+ const systemPath = typeof databases !== 'undefined' && databases.system?.hdb_user?.primaryStore?.path;
167
+ if (systemPath) {
168
+ setProperty(hdbTerms.CONFIG_PARAMS.DATABASES, { system: { path: path.dirname(systemPath) } });
169
+ }
170
+
165
171
  if (https_enabled) {
166
172
  setProperty(hdbTerms.CONFIG_PARAMS.HTTP_SECUREPORT, get(hdbTerms.CONFIG_PARAMS.HTTP_PORT));
167
173
  setProperty(hdbTerms.CONFIG_PARAMS.HTTP_PORT, null);