@harperfast/harper-pro 5.0.4 → 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.
- package/core/AGENTS.md +107 -0
- package/core/CLAUDE.md +1 -0
- package/core/bin/status.js +2 -2
- package/core/bin/stop.js +5 -6
- package/core/components/EntryHandler.ts +4 -2
- package/core/components/Scope.ts +1 -1
- package/core/components/componentLoader.ts +11 -4
- package/core/components/requestRestart.ts +17 -2
- package/core/dataLayer/harperBridge/TableSizeObject.ts +35 -0
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.ts +24 -0
- package/core/package-lock.json +1043 -112
- package/core/resources/DatabaseTransaction.ts +8 -3
- package/core/resources/Table.ts +12 -17
- package/core/resources/databases.ts +2 -2
- package/core/resources/graphql.ts +163 -165
- package/core/resources/indexes/HierarchicalNavigableSmallWorld.ts +14 -3
- package/core/resources/indexes/vector.ts +17 -0
- package/core/resources/loadEnv.ts +20 -16
- package/core/resources/login.ts +4 -3
- package/core/resources/roles.ts +60 -65
- package/core/security/auth.ts +15 -14
- package/core/security/jsLoader.ts +27 -9
- package/core/security/keys.js +1 -1
- package/core/server/REST.ts +10 -11
- package/core/server/fastifyRoutes.ts +30 -29
- package/core/server/graphqlQuerying.ts +4 -3
- package/core/server/http.ts +175 -1
- package/core/server/mqtt.ts +8 -2
- package/core/server/serverHelpers/serverUtilities.ts +2 -5
- package/core/server/threads/threadServer.js +30 -2
- package/core/server/throttle.ts +18 -0
- package/core/utility/environment/environmentManager.js +10 -4
- package/core/utility/environment/systemInformation.ts +698 -0
- package/core/utility/hdbTerms.ts +1 -0
- package/core/utility/operation_authorization.js +2 -5
- package/dist/core/bin/status.js +2 -2
- package/dist/core/bin/status.js.map +1 -1
- package/dist/core/bin/stop.js +5 -5
- package/dist/core/bin/stop.js.map +1 -1
- package/dist/core/components/EntryHandler.js +4 -2
- package/dist/core/components/EntryHandler.js.map +1 -1
- package/dist/core/components/Scope.js +1 -1
- package/dist/core/components/Scope.js.map +1 -1
- package/dist/core/components/componentLoader.js +11 -3
- package/dist/core/components/componentLoader.js.map +1 -1
- package/dist/core/components/requestRestart.js +12 -1
- package/dist/core/components/requestRestart.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/TableSizeObject.js +32 -0
- package/dist/core/dataLayer/harperBridge/TableSizeObject.js.map +1 -0
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +18 -19
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js.map +1 -1
- package/dist/core/resources/DatabaseTransaction.js +6 -1
- package/dist/core/resources/DatabaseTransaction.js.map +1 -1
- package/dist/core/resources/Table.js +14 -18
- package/dist/core/resources/Table.js.map +1 -1
- package/dist/core/resources/databases.js +2 -1
- package/dist/core/resources/databases.js.map +1 -1
- package/dist/core/resources/graphql.js +176 -176
- package/dist/core/resources/graphql.js.map +1 -1
- package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js +14 -2
- package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
- package/dist/core/resources/indexes/vector.js +14 -0
- package/dist/core/resources/indexes/vector.js.map +1 -1
- package/dist/core/resources/loadEnv.js +20 -17
- package/dist/core/resources/loadEnv.js.map +1 -1
- package/dist/core/resources/login.js +4 -4
- package/dist/core/resources/login.js.map +1 -1
- package/dist/core/resources/roles.js +64 -68
- package/dist/core/resources/roles.js.map +1 -1
- package/dist/core/security/auth.js +17 -15
- package/dist/core/security/auth.js.map +1 -1
- package/dist/core/security/jsLoader.js +29 -9
- package/dist/core/security/jsLoader.js.map +1 -1
- package/dist/core/security/keys.js +1 -1
- package/dist/core/server/REST.js +11 -11
- package/dist/core/server/REST.js.map +1 -1
- package/dist/core/server/fastifyRoutes.js +30 -29
- package/dist/core/server/fastifyRoutes.js.map +1 -1
- package/dist/core/server/graphqlQuerying.js +5 -4
- package/dist/core/server/graphqlQuerying.js.map +1 -1
- package/dist/core/server/http.js +179 -0
- package/dist/core/server/http.js.map +1 -1
- package/dist/core/server/mqtt.js +5 -3
- package/dist/core/server/mqtt.js.map +1 -1
- package/dist/core/server/serverHelpers/serverUtilities.js +2 -2
- package/dist/core/server/serverHelpers/serverUtilities.js.map +1 -1
- package/dist/core/server/threads/threadServer.js +26 -2
- package/dist/core/server/threads/threadServer.js.map +1 -1
- package/dist/core/server/throttle.js +17 -0
- package/dist/core/server/throttle.js.map +1 -1
- package/dist/core/utility/environment/environmentManager.js +9 -4
- package/dist/core/utility/environment/environmentManager.js.map +1 -1
- package/dist/core/utility/environment/systemInformation.js +359 -219
- package/dist/core/utility/environment/systemInformation.js.map +1 -1
- package/dist/core/utility/hdbTerms.js +1 -0
- package/dist/core/utility/hdbTerms.js.map +1 -1
- package/dist/core/utility/operation_authorization.js +2 -2
- package/dist/core/utility/operation_authorization.js.map +1 -1
- package/dist/licensing/usageLicensing.js +1 -1
- package/dist/licensing/usageLicensing.js.map +1 -1
- package/dist/replication/replicationConnection.js +1 -0
- package/dist/replication/replicationConnection.js.map +1 -1
- package/dist/replication/setNode.js +1 -1
- package/dist/replication/setNode.js.map +1 -1
- package/dist/replication/subscriptionManager.js +1 -0
- package/dist/replication/subscriptionManager.js.map +1 -1
- package/licensing/usageLicensing.ts +1 -1
- package/npm-shrinkwrap.json +1880 -891
- package/package.json +14 -13
- package/replication/replicationConnection.ts +1 -0
- package/replication/setNode.ts +1 -1
- package/replication/subscriptionManager.ts +1 -0
- package/studio/web/assets/{index-CjeZNBFc.js → index-qbLPhOzw.js} +2 -2
- package/studio/web/assets/{index-CjeZNBFc.js.map → index-qbLPhOzw.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +0 -25
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +0 -34
- package/core/utility/environment/systemInformation.js +0 -355
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +0 -24
- 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?.('/')
|
|
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() });
|
package/core/server/throttle.ts
CHANGED
|
@@ -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(
|
|
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(
|
|
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,
|
|
164
|
-
setProperty(hdbTerms.CONFIG_PARAMS.STORAGE_PATH,
|
|
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);
|