@harperfast/harper-pro 5.0.0-alpha.9 → 5.0.0-beta.2
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/.dockerignore +9 -0
- package/core/.git-blame-ignore-revs +2 -0
- package/core/.github/workflows/create-release.yaml +4 -4
- package/core/.github/workflows/integration-tests.yml +12 -10
- package/core/.github/workflows/notify-release-published.yaml +1 -1
- package/core/.github/workflows/publish-docker.yaml +2 -2
- package/core/.github/workflows/publish-npm.yaml +4 -4
- package/core/CONTRIBUTING.md +1 -1
- package/core/Dockerfile +62 -0
- package/core/build-tools/build-studio.sh +12 -0
- package/core/build-tools/build.sh +22 -0
- package/core/build-tools/download-prebuilds.js +13 -0
- package/core/components/Logger.ts +14 -0
- package/core/components/Scope.ts +35 -11
- package/core/components/componentLoader.ts +27 -10
- package/core/components/operations.js +10 -2
- package/core/config/configUtils.js +1 -1
- package/core/dataLayer/CreateTableObject.js +2 -2
- package/core/dataLayer/schema.js +7 -5
- package/core/dataLayer/schemaDescribe.js +1 -1
- package/core/index.d.ts +11 -6
- package/core/index.js +2 -0
- package/core/integrationTests/README.md +24 -0
- package/core/integrationTests/apiTests/tests/10_otherRoleTests.mjs +6 -6
- package/core/integrationTests/apiTests/tests/12_configuration.mjs +1 -1
- package/core/integrationTests/apiTests/tests/14_tokenAuth.mjs +2 -2
- package/core/integrationTests/apiTests/tests/16_terminologyUpdates.mjs +4 -4
- package/core/integrationTests/apiTests/tests/1_environmentSetup.mjs +1 -1
- package/core/integrationTests/apiTests/tests/2_dataLoad.mjs +4 -4
- package/core/integrationTests/apiTests/tests/3_sqlTests.mjs +3 -3
- package/core/integrationTests/apiTests/tests/4_noSqlTests.mjs +12 -12
- package/core/integrationTests/apiTests/tests/5_noSqlRoleTesting.mjs +8 -8
- package/core/integrationTests/apiTests/tests/7_jobsAndJobRoleTesting.mjs +10 -12
- package/core/integrationTests/apiTests/tests/8_deleteTests.mjs +8 -8
- package/core/integrationTests/apiTests/tests/9_transactions.mjs +2 -2
- package/core/integrationTests/apiTests/utils/search.mjs +1 -1
- package/core/integrationTests/apiTests/utils/table.mjs +1 -1
- package/core/integrationTests/server/operation-user-rbac.test.ts +1 -1
- package/core/integrationTests/server/operations-server.test.ts +1 -1
- package/core/integrationTests/server/storage-reclamation.test.ts +1 -1
- package/core/integrationTests/utils/README.md +1 -15
- package/core/integrationTests/utils/harperLifecycle.ts +33 -21
- package/core/package.json +23 -5
- package/core/resources/ResourceInterface.ts +1 -1
- package/core/resources/Table.ts +26 -11
- package/core/resources/analytics/read.ts +33 -26
- package/core/resources/analytics/write.ts +3 -7
- package/core/resources/databases.ts +29 -18
- package/core/resources/search.ts +10 -5
- package/core/security/auth.ts +1 -1
- package/core/security/jsLoader.ts +302 -83
- package/core/security/keys.js +11 -12
- package/core/security/user.ts +3 -3
- package/core/server/REST.ts +18 -2
- package/core/server/Server.ts +2 -1
- package/core/server/fastifyRoutes.ts +1 -0
- package/core/server/http.ts +13 -9
- package/core/server/loadRootComponents.js +1 -0
- package/core/server/operationsServer.ts +2 -1
- package/core/server/threads/manageThreads.js +49 -35
- package/core/static/defaultConfig.yaml +3 -0
- package/core/unitTests/apiTests/RESTProperties-test.mjs +2 -2
- package/core/unitTests/apiTests/basicREST-test.mjs +2 -2
- package/core/unitTests/components/Scope.test.js +54 -16
- package/core/unitTests/components/fixtures/testJSWithDeps/child-dir/circular.js +4 -0
- package/core/unitTests/components/fixtures/testJSWithDeps/child-dir/in-child-dir.js +4 -0
- package/core/unitTests/components/fixtures/testJSWithDeps/child-dir/typestrip.ts +2 -0
- package/core/unitTests/components/fixtures/testJSWithDeps/resources.js +43 -0
- package/core/unitTests/components/fixtures/testJSWithDeps/test-child-process.js +18 -0
- package/core/unitTests/components/globalIsolation.test.js +87 -1
- package/core/unitTests/config/configUtils.test.js +1 -260
- package/core/unitTests/resources/query.test.js +16 -1
- package/core/unitTests/resources/vectorIndex.test.js +1 -1
- package/core/unitTests/server/fastifyRoutes/operations.test.js +1 -1
- package/core/unitTests/testUtils.js +0 -17
- package/core/utility/hdbTerms.ts +3 -0
- package/core/utility/installation.ts +2 -5
- package/core/utility/lmdb/commonUtility.js +21 -10
- package/dist/core/{resources/ResourceInterfaceV2.js → components/Logger.js} +1 -1
- package/dist/core/components/Logger.js.map +1 -0
- package/dist/core/components/Scope.js +18 -10
- package/dist/core/components/Scope.js.map +1 -1
- package/dist/core/components/componentLoader.js +17 -10
- package/dist/core/components/componentLoader.js.map +1 -1
- package/dist/core/components/operations.js +2 -2
- package/dist/core/components/operations.js.map +1 -1
- package/dist/core/config/configUtils.js +1 -1
- package/dist/core/config/configUtils.js.map +1 -1
- package/dist/core/dataLayer/CreateTableObject.js +2 -2
- package/dist/core/dataLayer/CreateTableObject.js.map +1 -1
- package/dist/core/dataLayer/schema.js +6 -5
- package/dist/core/dataLayer/schema.js.map +1 -1
- package/dist/core/dataLayer/schemaDescribe.js +1 -1
- package/dist/core/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/resources/Table.js +12 -4
- package/dist/core/resources/Table.js.map +1 -1
- package/dist/core/resources/analytics/read.js +32 -22
- package/dist/core/resources/analytics/read.js.map +1 -1
- package/dist/core/resources/analytics/write.js +3 -6
- package/dist/core/resources/analytics/write.js.map +1 -1
- package/dist/core/resources/databases.js +22 -19
- package/dist/core/resources/databases.js.map +1 -1
- package/dist/core/resources/search.js +11 -5
- package/dist/core/resources/search.js.map +1 -1
- package/dist/core/security/auth.js +1 -1
- package/dist/core/security/auth.js.map +1 -1
- package/dist/core/security/jsLoader.js +265 -73
- package/dist/core/security/jsLoader.js.map +1 -1
- package/dist/core/security/keys.js +11 -12
- package/dist/core/security/keys.js.map +1 -1
- package/dist/core/security/user.js +3 -3
- package/dist/core/security/user.js.map +1 -1
- package/dist/core/server/REST.js +16 -2
- package/dist/core/server/REST.js.map +1 -1
- package/dist/core/server/Server.js.map +1 -1
- package/dist/core/server/fastifyRoutes.js +2 -0
- package/dist/core/server/fastifyRoutes.js.map +1 -1
- package/dist/core/server/http.js +12 -6
- package/dist/core/server/http.js.map +1 -1
- package/dist/core/server/loadRootComponents.js +1 -0
- package/dist/core/server/loadRootComponents.js.map +1 -1
- package/dist/core/server/operationsServer.js +3 -1
- package/dist/core/server/operationsServer.js.map +1 -1
- package/dist/core/server/threads/manageThreads.js +50 -35
- package/dist/core/server/threads/manageThreads.js.map +1 -1
- package/dist/core/utility/hdbTerms.js +3 -0
- package/dist/core/utility/hdbTerms.js.map +1 -1
- package/dist/core/utility/installation.js.map +1 -1
- package/dist/core/utility/lmdb/commonUtility.js +20 -13
- package/dist/core/utility/lmdb/commonUtility.js.map +1 -1
- package/dist/licensing/usageLicensing.js.map +1 -1
- package/dist/replication/knownNodes.js +5 -37
- package/dist/replication/knownNodes.js.map +1 -1
- package/dist/replication/nodeIdMapping.js +2 -35
- package/dist/replication/nodeIdMapping.js.map +1 -1
- package/dist/replication/replicationConnection.js +15 -6
- package/dist/replication/replicationConnection.js.map +1 -1
- package/dist/replication/replicator.js +3 -2
- package/dist/replication/replicator.js.map +1 -1
- package/dist/replication/setNode.js +1 -1
- package/dist/replication/setNode.js.map +1 -1
- package/dist/security/certificate.js.map +1 -1
- package/licensing/usageLicensing.ts +3 -2
- package/npm-shrinkwrap.json +303 -282
- package/package.json +4 -3
- package/replication/knownNodes.ts +3 -2
- package/replication/nodeIdMapping.ts +1 -1
- package/replication/replicationConnection.ts +33 -8
- package/replication/replicator.ts +7 -2
- package/replication/setNode.ts +1 -1
- package/security/certificate.ts +2 -1
- package/studio/web/assets/{index-v3wIpSYx.js → index-CWN9Wp5V.js} +2 -2
- package/studio/web/assets/{index-v3wIpSYx.js.map → index-CWN9Wp5V.js.map} +1 -1
- package/studio/web/assets/{index-ChCctErQ.js → index-CzghSAn2.js} +2 -2
- package/studio/web/assets/{index-ChCctErQ.js.map → index-CzghSAn2.js.map} +1 -1
- package/studio/web/assets/{index-Qu8D43wo.js → index-DMDhGP7N.js} +5 -5
- package/studio/web/assets/{index-Qu8D43wo.js.map → index-DMDhGP7N.js.map} +1 -1
- package/studio/web/assets/{index.lazy-tVSPM7bX.js → index.lazy-C-yDTGUy.js} +2 -2
- package/studio/web/assets/{index.lazy-tVSPM7bX.js.map → index.lazy-C-yDTGUy.js.map} +1 -1
- package/studio/web/assets/{profiler-C9as4sv-.js → profiler-0fZAOscv.js} +2 -2
- package/studio/web/assets/{profiler-C9as4sv-.js.map → profiler-0fZAOscv.js.map} +1 -1
- package/studio/web/assets/{react-redux-RRIhZnM6.js → react-redux-BIxqK8O6.js} +2 -2
- package/studio/web/assets/{react-redux-RRIhZnM6.js.map → react-redux-BIxqK8O6.js.map} +1 -1
- package/studio/web/assets/{startRecording-DYa4zCXV.js → startRecording-Ca3Gf2MY.js} +2 -2
- package/studio/web/assets/{startRecording-DYa4zCXV.js.map → startRecording-Ca3Gf2MY.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/core/resources/ResourceInterfaceV2.ts +0 -53
- package/core/resources/ResourceV2.ts +0 -67
- package/core/resources/analytics/profile.ts +0 -109
- package/core/unitTests/apiTests/analytics-test.mjs +0 -38
- package/core/v1.d.ts +0 -47
- package/core/v1.js +0 -38
- package/core/v2.d.ts +0 -47
- package/core/v2.js +0 -38
- package/dist/core/resources/ResourceInterfaceV2.js.map +0 -1
- package/dist/core/resources/ResourceV2.js +0 -27
- package/dist/core/resources/ResourceV2.js.map +0 -1
- package/dist/core/resources/analytics/profile.js +0 -144
- package/dist/core/resources/analytics/profile.js.map +0 -1
|
@@ -17,51 +17,6 @@ const { HTTP_STATUS_CODES } = require('#js/utility/errors/commonErrors');
|
|
|
17
17
|
|
|
18
18
|
const DIRNAME = __dirname;
|
|
19
19
|
const HDB_ROOT = path.join(DIRNAME, 'yaml');
|
|
20
|
-
const TEST_CERT = path.join(DIRNAME, '../../../hdb/keys/certificate.pem');
|
|
21
|
-
const TEST_PRIVATE_KEY = path.join(DIRNAME, '../../../hdb/keys/ca.pem');
|
|
22
|
-
const TEST_ARGS = {
|
|
23
|
-
HTTP_PORT: '9936',
|
|
24
|
-
HTTP_CORS: false,
|
|
25
|
-
HTTP_CORSACCESSLIST: '["test1", "test2"]',
|
|
26
|
-
HTTP_HEADERSTIMEOUT: '59999',
|
|
27
|
-
HTTP_KEEPALIVETIMEOUT: '4999',
|
|
28
|
-
TLS_CERTIFICATE: TEST_CERT,
|
|
29
|
-
TLS_CERTIFICATEAUTHORITY: null,
|
|
30
|
-
TLS_PRIVATEKEY: TEST_PRIVATE_KEY,
|
|
31
|
-
HTTP_TIMEOUT: '119999',
|
|
32
|
-
COMPONENTSROOT: path.join(DIRNAME, 'test_custom_functions'),
|
|
33
|
-
THREADS_COUNT: '4',
|
|
34
|
-
THREADS_DEBUG: false,
|
|
35
|
-
HTTP_REMOTE_ADDRESS_AFFINITY: false,
|
|
36
|
-
LOCALSTUDIO_ENABLED: true,
|
|
37
|
-
LOGGING_FILE: false,
|
|
38
|
-
LOGGING_LEVEL: 'notify',
|
|
39
|
-
LOGGING_ROOT: path.join(DIRNAME, 'testlogging'),
|
|
40
|
-
LOGGING_ROTATION_ENABLED: true,
|
|
41
|
-
LOGGING_ROTATION_COMPRESS: true,
|
|
42
|
-
LOGGING_ROTATION_INTERVAL: '10D',
|
|
43
|
-
LOGGING_ROTATION_MAXSIZE: '10M',
|
|
44
|
-
LOGGING_ROTATION_PATH: 'lets/send/log/here',
|
|
45
|
-
LOGGING_STDSTREAMS: true,
|
|
46
|
-
LOGGING_AUDITLOG: true,
|
|
47
|
-
AUTHENTICATION_OPERATIONTOKENTIMEOUT: '2d',
|
|
48
|
-
AUTHENTICATION_REFRESHTOKENTIMEOUT: '31d',
|
|
49
|
-
OPERATIONSAPI_NETWORK_CORS: false,
|
|
50
|
-
OPERATIONSAPI_NETWORK_CORSACCESSLIST: '["test1", "test2"]',
|
|
51
|
-
OPERATIONSAPI_NETWORK_HEADERSTIMEOUT: '60001',
|
|
52
|
-
OPERATIONSAPI_NETWORK_HTTPS: true,
|
|
53
|
-
OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT: '5001',
|
|
54
|
-
OPERATIONSAPI_NETWORK_PORT: '2599',
|
|
55
|
-
OPERATIONSAPI_NETWORK_TIMEOUT: '120001',
|
|
56
|
-
ROOTPATH: HDB_ROOT,
|
|
57
|
-
STORAGE_WRITEASYNC: true,
|
|
58
|
-
STORAGE_OVERLAPPINGSYNC: false,
|
|
59
|
-
STORAGE_CACHING: false,
|
|
60
|
-
STORAGE_COMPRESSION: false,
|
|
61
|
-
STORAGE_NOREADAHEAD: false,
|
|
62
|
-
STORAGE_PREFETCHWRITES: false,
|
|
63
|
-
STORAGE_PATH: 'users/unit_test/path',
|
|
64
|
-
};
|
|
65
20
|
const TEST_ARGS_2 = {
|
|
66
21
|
LOGGING_LEVEL: 'error',
|
|
67
22
|
ROOTPATH: HDB_ROOT,
|
|
@@ -179,204 +134,6 @@ describe('Test configUtils module', () => {
|
|
|
179
134
|
after(() => {
|
|
180
135
|
validate_config_rw();
|
|
181
136
|
});
|
|
182
|
-
|
|
183
|
-
it('Test that given args are updated in new config file', () => {
|
|
184
|
-
const expected_config = {
|
|
185
|
-
authentication: {
|
|
186
|
-
authorizeLocal: false,
|
|
187
|
-
cacheTTL: 30000,
|
|
188
|
-
enableSessions: true,
|
|
189
|
-
operationTokenTimeout: '2d',
|
|
190
|
-
refreshTokenTimeout: '31d',
|
|
191
|
-
},
|
|
192
|
-
analytics: {
|
|
193
|
-
aggregatePeriod: 60,
|
|
194
|
-
replicate: false,
|
|
195
|
-
},
|
|
196
|
-
applications: {
|
|
197
|
-
lockdown: 'freeze',
|
|
198
|
-
containment: 'vm',
|
|
199
|
-
dependencyContainment: false,
|
|
200
|
-
},
|
|
201
|
-
componentsRoot: path.join(DIRNAME, '/test_custom_functions'),
|
|
202
|
-
localStudio: {
|
|
203
|
-
enabled: true,
|
|
204
|
-
},
|
|
205
|
-
logging: {
|
|
206
|
-
auditAuthEvents: {
|
|
207
|
-
logFailed: false,
|
|
208
|
-
logSuccessful: false,
|
|
209
|
-
},
|
|
210
|
-
auditLog: true,
|
|
211
|
-
auditRetention: '3d',
|
|
212
|
-
file: false,
|
|
213
|
-
level: 'notify',
|
|
214
|
-
root: path.join(DIRNAME, '/testlogging'),
|
|
215
|
-
rotation: {
|
|
216
|
-
enabled: true,
|
|
217
|
-
compress: true,
|
|
218
|
-
interval: '10D',
|
|
219
|
-
maxSize: '10M',
|
|
220
|
-
path: 'lets/send/log/here',
|
|
221
|
-
},
|
|
222
|
-
stdStreams: true,
|
|
223
|
-
},
|
|
224
|
-
mqtt: {
|
|
225
|
-
network: {
|
|
226
|
-
mtls: false,
|
|
227
|
-
port: 1883,
|
|
228
|
-
securePort: 8883,
|
|
229
|
-
},
|
|
230
|
-
webSocket: true,
|
|
231
|
-
requireAuthentication: true,
|
|
232
|
-
},
|
|
233
|
-
node: {
|
|
234
|
-
hostname: null,
|
|
235
|
-
},
|
|
236
|
-
operationsApi: {
|
|
237
|
-
network: {
|
|
238
|
-
compressionThreshold: 0,
|
|
239
|
-
cors: false,
|
|
240
|
-
corsAccessList: ['test1', 'test2'],
|
|
241
|
-
port: 2599,
|
|
242
|
-
securePort: 9925,
|
|
243
|
-
domainSocket: 'hdb/operations-server',
|
|
244
|
-
headersTimeout: 60001,
|
|
245
|
-
http2: false,
|
|
246
|
-
https: true,
|
|
247
|
-
mtls: false,
|
|
248
|
-
keepAliveTimeout: 5001,
|
|
249
|
-
timeout: 120001,
|
|
250
|
-
},
|
|
251
|
-
tls: {
|
|
252
|
-
certificate: TEST_CERT,
|
|
253
|
-
certificateAuthority: null,
|
|
254
|
-
privateKey: TEST_PRIVATE_KEY,
|
|
255
|
-
},
|
|
256
|
-
},
|
|
257
|
-
http: {
|
|
258
|
-
compressionThreshold: 0,
|
|
259
|
-
cors: false,
|
|
260
|
-
corsAccessList: ['test1', 'test2'],
|
|
261
|
-
keepAliveTimeout: 4999,
|
|
262
|
-
port: 9936,
|
|
263
|
-
securePort: 9926,
|
|
264
|
-
timeout: 119999,
|
|
265
|
-
headersTimeout: 59999,
|
|
266
|
-
http2: false,
|
|
267
|
-
mtls: false,
|
|
268
|
-
},
|
|
269
|
-
threads: {
|
|
270
|
-
count: 4,
|
|
271
|
-
debug: false,
|
|
272
|
-
},
|
|
273
|
-
rootPath: path.join(DIRNAME, '/yaml'),
|
|
274
|
-
storage: {
|
|
275
|
-
writeAsync: true,
|
|
276
|
-
caching: false,
|
|
277
|
-
compression: false,
|
|
278
|
-
noReadAhead: false,
|
|
279
|
-
path: 'users/unit_test/path',
|
|
280
|
-
prefetchWrites: false,
|
|
281
|
-
overlappingSync: false,
|
|
282
|
-
},
|
|
283
|
-
tls: {
|
|
284
|
-
certificate: TEST_CERT,
|
|
285
|
-
certificateAuthority: null,
|
|
286
|
-
privateKey: TEST_PRIVATE_KEY,
|
|
287
|
-
},
|
|
288
|
-
};
|
|
289
|
-
const expected_flat_config = {
|
|
290
|
-
authentication_cachettl: 30000,
|
|
291
|
-
authentication_authorizelocal: false,
|
|
292
|
-
authentication_enablesessions: true,
|
|
293
|
-
authentication_operationtokentimeout: '2d',
|
|
294
|
-
authentication_refreshtokentimeout: '31d',
|
|
295
|
-
analytics_aggregateperiod: 60,
|
|
296
|
-
analytics_replicate: false,
|
|
297
|
-
applications_containment: 'vm',
|
|
298
|
-
applications_dependencycontainment: false,
|
|
299
|
-
applications_lockdown: 'freeze',
|
|
300
|
-
componentsroot: path.join(DIRNAME, '/test_custom_functions'),
|
|
301
|
-
localstudio_enabled: true,
|
|
302
|
-
logging_auditauthevents_logfailed: false,
|
|
303
|
-
logging_auditauthevents_logsuccessful: false,
|
|
304
|
-
logging_auditlog: true,
|
|
305
|
-
logging_auditretention: '3d',
|
|
306
|
-
logging_file: false,
|
|
307
|
-
logging_level: 'notify',
|
|
308
|
-
logging_root: path.join(DIRNAME, '/testlogging'),
|
|
309
|
-
logging_rotation_enabled: true,
|
|
310
|
-
logging_rotation_compress: true,
|
|
311
|
-
logging_rotation_interval: '10D',
|
|
312
|
-
logging_rotation_maxsize: '10M',
|
|
313
|
-
logging_rotation_path: 'lets/send/log/here',
|
|
314
|
-
logging_stdstreams: true,
|
|
315
|
-
mqtt_network_mtls: false,
|
|
316
|
-
mqtt_network_port: 1883,
|
|
317
|
-
mqtt_network_secureport: 8883,
|
|
318
|
-
mqtt_websocket: true,
|
|
319
|
-
mqtt_requireauthentication: true,
|
|
320
|
-
node_hostname: null,
|
|
321
|
-
operationsapi_network_compressionthreshold: 0,
|
|
322
|
-
operationsapi_network_cors: false,
|
|
323
|
-
operationsapi_network_corsaccesslist: ['test1', 'test2'],
|
|
324
|
-
operationsapi_network_port: 2599,
|
|
325
|
-
operationsapi_network_secureport: 9925,
|
|
326
|
-
operationsapi_network_domainsocket: 'hdb/operations-server',
|
|
327
|
-
operationsapi_network_headerstimeout: 60001,
|
|
328
|
-
operationsapi_network_https: true,
|
|
329
|
-
operationsapi_network_http2: false,
|
|
330
|
-
operationsapi_network_keepalivetimeout: 5001,
|
|
331
|
-
operationsapi_network_timeout: 120001,
|
|
332
|
-
http_compressionthreshold: 0,
|
|
333
|
-
http_cors: false,
|
|
334
|
-
http_corsaccesslist: ['test1', 'test2'],
|
|
335
|
-
http_keepalivetimeout: 4999,
|
|
336
|
-
http_http2: false,
|
|
337
|
-
http_port: 9936,
|
|
338
|
-
http_secureport: 9926,
|
|
339
|
-
http_mtls: false,
|
|
340
|
-
threads_count: 4,
|
|
341
|
-
threads_debug: false,
|
|
342
|
-
http_timeout: 119999,
|
|
343
|
-
http_headerstimeout: 59999,
|
|
344
|
-
rootpath: path.join(DIRNAME, '/yaml'),
|
|
345
|
-
storage_writeasync: true,
|
|
346
|
-
storage_caching: false,
|
|
347
|
-
storage_compression: false,
|
|
348
|
-
storage_noreadahead: false,
|
|
349
|
-
storage_path: 'users/unit_test/path',
|
|
350
|
-
storage_prefetchwrites: false,
|
|
351
|
-
storage_overlappingsync: false,
|
|
352
|
-
tls_certificate: TEST_CERT,
|
|
353
|
-
tls_certificateauthority: null,
|
|
354
|
-
tls_privatekey: TEST_PRIVATE_KEY,
|
|
355
|
-
operationsapi_tls_certificate: TEST_CERT,
|
|
356
|
-
operationsapi_tls_privatekey: TEST_PRIVATE_KEY,
|
|
357
|
-
operationsapi_tls_certificateauthority: null,
|
|
358
|
-
operationsapi_network_mtls: false,
|
|
359
|
-
};
|
|
360
|
-
|
|
361
|
-
config_utils_rw.createConfigFile(TEST_ARGS);
|
|
362
|
-
|
|
363
|
-
const test_config_doc = YAML.parseDocument(fs.readFileSync(CONFIG_FILE_PATH, 'utf8'));
|
|
364
|
-
const config_json = test_config_doc.toJSON();
|
|
365
|
-
const test_flat_config_obj = config_utils_rw.flattenConfig(config_json);
|
|
366
|
-
|
|
367
|
-
expect(config_json).to.eql(expected_config);
|
|
368
|
-
const non_object_flat_test_config_obj = { ...test_flat_config_obj };
|
|
369
|
-
for (let key in non_object_flat_test_config_obj) {
|
|
370
|
-
if (
|
|
371
|
-
typeof non_object_flat_test_config_obj[key] === 'object' &&
|
|
372
|
-
non_object_flat_test_config_obj[key] &&
|
|
373
|
-
!Array.isArray(non_object_flat_test_config_obj[key])
|
|
374
|
-
)
|
|
375
|
-
delete non_object_flat_test_config_obj[key];
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
expect(non_object_flat_test_config_obj).to.eql(expected_flat_config);
|
|
379
|
-
});
|
|
380
137
|
});
|
|
381
138
|
|
|
382
139
|
describe('Test getDefaultConfig function', () => {
|
|
@@ -391,6 +148,7 @@ describe('Test configUtils module', () => {
|
|
|
391
148
|
applications_containment: 'vm',
|
|
392
149
|
applications_dependencycontainment: false,
|
|
393
150
|
applications_lockdown: 'freeze',
|
|
151
|
+
applications_allowedspawncommands: 'freeze',
|
|
394
152
|
http_cors: false,
|
|
395
153
|
http_corsaccesslist: [null],
|
|
396
154
|
http_compressionthreshold: 0,
|
|
@@ -449,23 +207,6 @@ describe('Test configUtils module', () => {
|
|
|
449
207
|
flat_default_config_obj_rw();
|
|
450
208
|
});
|
|
451
209
|
|
|
452
|
-
it('Test if in-memory object is undefined, the default config obj is instantiated and default value is returned', () => {
|
|
453
|
-
flat_default_config_obj_rw = config_utils_rw.__set__('flatDefaultConfigObj', undefined);
|
|
454
|
-
|
|
455
|
-
config_utils_rw.getDefaultConfig(hdbTerms.CONFIG_PARAMS.NODE_HOSTNAME);
|
|
456
|
-
const flat_default_config_obj = config_utils_rw.__get__('flatDefaultConfigObj');
|
|
457
|
-
const non_object_flat_default_config_obj = { ...flat_default_config_obj };
|
|
458
|
-
for (let key in non_object_flat_default_config_obj) {
|
|
459
|
-
if (
|
|
460
|
-
typeof non_object_flat_default_config_obj[key] === 'object' &&
|
|
461
|
-
non_object_flat_default_config_obj[key] &&
|
|
462
|
-
!Array.isArray(non_object_flat_default_config_obj[key])
|
|
463
|
-
)
|
|
464
|
-
delete non_object_flat_default_config_obj[key];
|
|
465
|
-
}
|
|
466
|
-
expect(non_object_flat_default_config_obj).to.eql(expected_flat_default_config_obj);
|
|
467
|
-
});
|
|
468
|
-
|
|
469
210
|
it('Test that if the in-memory object exists, the correct default value is returned', () => {
|
|
470
211
|
flat_default_config_obj_rw = config_utils_rw.__set__('flatDefaultConfigObj', expected_flat_default_config_obj);
|
|
471
212
|
const parse_document_spy = sandbox.spy(YAML, 'parseDocument');
|
|
@@ -199,6 +199,20 @@ describe('Querying through Resource API', () => {
|
|
|
199
199
|
}
|
|
200
200
|
assert.equal(results.length, 1);
|
|
201
201
|
});
|
|
202
|
+
it('Ensure that we are yielding when querying data in a table', async function () {
|
|
203
|
+
let results = [];
|
|
204
|
+
let yielded = false;
|
|
205
|
+
setImmediate(() => {
|
|
206
|
+
yielded = true;
|
|
207
|
+
});
|
|
208
|
+
for await (let record of QueryTable.search({
|
|
209
|
+
conditions: [{ attribute: 'id', comparator: 'less_than_equal', value: 'id-3' }],
|
|
210
|
+
})) {
|
|
211
|
+
results.push(record);
|
|
212
|
+
}
|
|
213
|
+
assert(yielded);
|
|
214
|
+
assert.equal(results.length, 24);
|
|
215
|
+
});
|
|
202
216
|
it('Query data in a table with non-indexed property', async function () {
|
|
203
217
|
let results = [];
|
|
204
218
|
for await (let record of QueryTable.search({
|
|
@@ -342,7 +356,8 @@ describe('Querying through Resource API', () => {
|
|
|
342
356
|
|
|
343
357
|
it('Query relational data in a table with many-to-one', async function () {
|
|
344
358
|
let results = [];
|
|
345
|
-
|
|
359
|
+
// do this test with sync iteration to verify it is possible
|
|
360
|
+
for (let record of QueryTable.search({
|
|
346
361
|
conditions: [{ attribute: 'id', value: 'id-1' }],
|
|
347
362
|
select: ['id', 'related', 'name'],
|
|
348
363
|
})) {
|
|
@@ -110,7 +110,7 @@ describe('HierarchicalNavigableSmallWorld indexing', () => {
|
|
|
110
110
|
);
|
|
111
111
|
});
|
|
112
112
|
it('can remove and add and search with vector index', async () => {
|
|
113
|
-
for (let record of HNSWTest.search([])) {
|
|
113
|
+
for await (let record of HNSWTest.search([])) {
|
|
114
114
|
await HNSWTest.delete(record.id);
|
|
115
115
|
}
|
|
116
116
|
const records = [
|
|
@@ -168,7 +168,7 @@ describe('Test custom functions operations', () => {
|
|
|
168
168
|
const coolComponent = result.entries.find((e) => e.name === 'my-cool-component');
|
|
169
169
|
const otherComponent = result.entries.find((e) => e.name === 'my-other-component');
|
|
170
170
|
expect(coolComponent).to.exist;
|
|
171
|
-
expect(coolComponent.entries.length).to.equal(
|
|
171
|
+
expect(coolComponent.entries.length).to.equal(3);
|
|
172
172
|
expect(coolComponent.package).to.be.undefined;
|
|
173
173
|
expect(otherComponent).to.exist;
|
|
174
174
|
expect(otherComponent.entries.find((e) => e.name === 'config.yaml')).to.exist;
|
|
@@ -357,23 +357,6 @@ function getMockTestPath() {
|
|
|
357
357
|
return testPath;
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
/**
|
|
361
|
-
* Returns the path to the test root path that will be used for testing
|
|
362
|
-
* @returns String representing the path value to the mock lmdb system directory
|
|
363
|
-
*/
|
|
364
|
-
function setupTestDBPath() {
|
|
365
|
-
let lmdb_path = path.join(ENV_DIR_PATH, process.pid.toString());
|
|
366
|
-
env.setProperty(terms.HDB_SETTINGS_NAMES.HDB_ROOT_KEY, lmdb_path);
|
|
367
|
-
env.setProperty(terms.CONFIG_PARAMS.DATABASES, { data: { path: lmdb_path }, dev: { path: lmdb_path } });
|
|
368
|
-
resetDatabases();
|
|
369
|
-
if (isMainThread) {
|
|
370
|
-
process.on('exit', function () {
|
|
371
|
-
tearDownMockDB();
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
return lmdb_path;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
360
|
/**
|
|
378
361
|
* Returns the path to the test root path that will be used for testing
|
|
379
362
|
* @returns String representing the path value to the mock lmdb system directory
|
package/core/utility/hdbTerms.ts
CHANGED
|
@@ -439,6 +439,8 @@ export const CONFIG_PARAMS = {
|
|
|
439
439
|
APPLICATIONS_LOCKDOWN: 'applications_lockdown',
|
|
440
440
|
APPLICATIONS_DEPENDENCYCONTAINMENT: 'applications_dependencyContainment',
|
|
441
441
|
APPLICATIONS_PACKAGEMANAGERPREFIX: 'applications_packageManagerPrefix',
|
|
442
|
+
APPLICATIONS_ALLOWEDBUILTINMODULES: 'applications_allowedBuiltInModules',
|
|
443
|
+
APPLICATIONS_ALLOWEDSPAWNCOMMANDS: 'applications_allowedSpawnCommands',
|
|
442
444
|
THREADS: 'threads',
|
|
443
445
|
THREADS_COUNT: 'threads_count',
|
|
444
446
|
THREADS_DEBUG: 'threads_debug',
|
|
@@ -544,6 +546,7 @@ export const CONFIG_PARAMS = {
|
|
|
544
546
|
REPLICATION_BLOBTIMEOUT: 'replication_blobTimeout',
|
|
545
547
|
REPLICATION_FAILOVER: 'replication_failover',
|
|
546
548
|
REPLICATION_BLOBCONCURRENCY: 'replication_blobConcurrency',
|
|
549
|
+
REPLICATION_MAXPAYLOAD: 'replication_maxPayload',
|
|
547
550
|
REPLICATION_RECORDCONCURRENCY: 'replication_recordConcurrency',
|
|
548
551
|
ROOTPATH: 'rootPath',
|
|
549
552
|
SERIALIZATION_BIGINT: 'serialization_bigInt',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Logger } from '../components/Logger.ts';
|
|
1
2
|
import * as terms from './hdbTerms.js';
|
|
2
3
|
import fs from 'node:fs';
|
|
3
4
|
import { noBootFile, getPropsFilePath } from './common_utils.js';
|
|
@@ -6,15 +7,11 @@ interface Env {
|
|
|
6
7
|
get(key: string): string;
|
|
7
8
|
}
|
|
8
9
|
|
|
9
|
-
interface ErrorLogger {
|
|
10
|
-
error(message: string): void;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
10
|
/** isHdbInstalled checks for a valid installation of Harper based on the env
|
|
14
11
|
* arg's settings path and any boot props file it can find and returns true
|
|
15
12
|
* if an installation is found; false otherwise.
|
|
16
13
|
*/
|
|
17
|
-
export function isHdbInstalled(env: Env, logger:
|
|
14
|
+
export function isHdbInstalled(env: Env, logger: Pick<Logger, 'error'>) {
|
|
18
15
|
try {
|
|
19
16
|
fs.statSync(getPropsFilePath());
|
|
20
17
|
fs.statSync(env.get(terms.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY));
|
|
@@ -58,28 +58,39 @@ function convertKeyValueToWrite(key) {
|
|
|
58
58
|
* Return all the indexable values from an attribute, ready to be indexed
|
|
59
59
|
*/
|
|
60
60
|
function getIndexedValues(value, indexNulls) {
|
|
61
|
-
if (value === null)
|
|
62
|
-
|
|
61
|
+
if (value === null) {
|
|
62
|
+
return indexNulls ? [null] : undefined;
|
|
63
|
+
}
|
|
64
|
+
if (value === undefined) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
63
67
|
if (PRIMITIVES.includes(typeof value)) {
|
|
64
68
|
if (value.length > MAX_SEARCH_KEY_LENGTH) {
|
|
65
69
|
return [value.slice(0, MAX_SEARCH_KEY_LENGTH) + OVERFLOW_MARKER];
|
|
66
70
|
}
|
|
67
71
|
return [value];
|
|
68
72
|
}
|
|
69
|
-
let values;
|
|
70
73
|
if (Array.isArray(value)) {
|
|
71
|
-
values = [];
|
|
74
|
+
const values = [];
|
|
72
75
|
for (let i = 0, l = value.length; i < l; i++) {
|
|
73
76
|
let element = value[i];
|
|
74
77
|
if (PRIMITIVES.includes(typeof element)) {
|
|
75
|
-
if (element.length > MAX_SEARCH_KEY_LENGTH)
|
|
78
|
+
if (element.length > MAX_SEARCH_KEY_LENGTH) {
|
|
76
79
|
values.push(element.slice(0, MAX_SEARCH_KEY_LENGTH) + OVERFLOW_MARKER);
|
|
77
|
-
else
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
} else {
|
|
81
|
+
values.push(element);
|
|
82
|
+
}
|
|
83
|
+
} else if (element === null && indexNulls) {
|
|
84
|
+
values.push(null);
|
|
85
|
+
} else if (element instanceof Date) {
|
|
86
|
+
values.push(element.getTime());
|
|
87
|
+
}
|
|
80
88
|
}
|
|
81
|
-
|
|
82
|
-
|
|
89
|
+
return values;
|
|
90
|
+
} else if (value instanceof Date) {
|
|
91
|
+
return [value.getTime()];
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
83
94
|
}
|
|
84
95
|
|
|
85
96
|
let lastTime = 0; // reported time used to ensure monotonic time.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../../core/components/Logger.ts"],"names":[],"mappings":""}
|
|
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
11
11
|
exports.Scope = exports.MissingDefaultFilesOptionError = void 0;
|
|
12
12
|
const harper_logger_js_1 = require("../utility/logging/harper_logger.js");
|
|
13
13
|
const node_events_1 = require("node:events");
|
|
14
|
+
const databases_ts_1 = require("../resources/databases.js");
|
|
14
15
|
const Server_ts_1 = require("../server/Server.js");
|
|
15
16
|
const EntryHandler_ts_1 = require("./EntryHandler.js");
|
|
16
17
|
const OptionsWatcher_ts_1 = require("./OptionsWatcher.js");
|
|
@@ -26,14 +27,15 @@ exports.MissingDefaultFilesOptionError = MissingDefaultFilesOptionError;
|
|
|
26
27
|
/**
|
|
27
28
|
* This class is what is passed to the `handleApplication` function of an extension.
|
|
28
29
|
*
|
|
29
|
-
* It is imperative that the instance is "ready" before
|
|
30
|
+
* It is imperative that the instance is "ready" before it's passed to the `handleApplication` function
|
|
30
31
|
* so that the developer can immediately start using `scope.options`, etc.
|
|
31
32
|
*
|
|
32
33
|
*/
|
|
33
34
|
class Scope extends node_events_1.EventEmitter {
|
|
34
35
|
#configFilePath;
|
|
35
36
|
#directory;
|
|
36
|
-
#
|
|
37
|
+
#appName;
|
|
38
|
+
#pluginName;
|
|
37
39
|
#entryHandler;
|
|
38
40
|
#entryHandlers;
|
|
39
41
|
#logger;
|
|
@@ -43,12 +45,15 @@ class Scope extends node_events_1.EventEmitter {
|
|
|
43
45
|
resources;
|
|
44
46
|
server;
|
|
45
47
|
ready;
|
|
46
|
-
|
|
48
|
+
databaseEvents;
|
|
49
|
+
constructor(appName, pluginName, directory, configFilePath, applicationScope) {
|
|
47
50
|
super();
|
|
48
|
-
this.#
|
|
51
|
+
this.#appName = appName;
|
|
52
|
+
this.#pluginName = pluginName;
|
|
49
53
|
this.#directory = directory;
|
|
50
54
|
this.#configFilePath = configFilePath;
|
|
51
|
-
this.#logger = (0, harper_logger_js_1.loggerWithTag)(this.#
|
|
55
|
+
this.#logger = logger || (0, harper_logger_js_1.loggerWithTag)(this.#appName);
|
|
56
|
+
this.databaseEvents = databases_ts_1.databaseEventsEmitter;
|
|
52
57
|
this.applicationScope = applicationScope;
|
|
53
58
|
this.resources = applicationScope?.resources ?? Resources_ts_1.resources;
|
|
54
59
|
this.server = applicationScope?.server ?? Server_ts_1.server;
|
|
@@ -56,7 +61,7 @@ class Scope extends node_events_1.EventEmitter {
|
|
|
56
61
|
this.#pendingInitialLoads = new Set();
|
|
57
62
|
this.ready = (0, node_events_1.once)(this, 'ready');
|
|
58
63
|
// Create the options instance for the scope immediately
|
|
59
|
-
this.options = new OptionsWatcher_ts_1.OptionsWatcher(
|
|
64
|
+
this.options = new OptionsWatcher_ts_1.OptionsWatcher(pluginName, configFilePath, this.#logger)
|
|
60
65
|
.on('error', this.#handleError.bind(this))
|
|
61
66
|
.on('change', this.#optionsWatcherChangeListener.bind(this)())
|
|
62
67
|
.on('ready', this.#handleOptionsWatcherReady.bind(this));
|
|
@@ -64,8 +69,11 @@ class Scope extends node_events_1.EventEmitter {
|
|
|
64
69
|
get logger() {
|
|
65
70
|
return this.#logger;
|
|
66
71
|
}
|
|
67
|
-
get
|
|
68
|
-
return this.#
|
|
72
|
+
get appName() {
|
|
73
|
+
return this.#appName;
|
|
74
|
+
}
|
|
75
|
+
get pluginName() {
|
|
76
|
+
return this.#pluginName;
|
|
69
77
|
}
|
|
70
78
|
get directory() {
|
|
71
79
|
return this.#directory;
|
|
@@ -94,7 +102,7 @@ class Scope extends node_events_1.EventEmitter {
|
|
|
94
102
|
return this;
|
|
95
103
|
}
|
|
96
104
|
#createEntryHandler(config) {
|
|
97
|
-
const entryHandler = new EntryHandler_ts_1.EntryHandler(this.#
|
|
105
|
+
const entryHandler = new EntryHandler_ts_1.EntryHandler(this.#pluginName, this.#directory, config, this.#logger)
|
|
98
106
|
.on('error', this.#handleError.bind(this))
|
|
99
107
|
.on('add', this.#defaultEntryHandlerListener('add'))
|
|
100
108
|
.on('change', this.#defaultEntryHandlerListener('change'))
|
|
@@ -236,7 +244,7 @@ class Scope extends node_events_1.EventEmitter {
|
|
|
236
244
|
return entryHandler;
|
|
237
245
|
}
|
|
238
246
|
requestRestart() {
|
|
239
|
-
this.#logger.debug?.(`Restart requested from ${this
|
|
247
|
+
this.#logger.debug?.(`Restart requested from ${this.#pluginName} scope for ${this.#appName}`);
|
|
240
248
|
(0, requestRestart_ts_1.requestRestart)();
|
|
241
249
|
}
|
|
242
250
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scope.js","sourceRoot":"","sources":["../../../core/components/Scope.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,0EAAoE;AACpE,6CAAiD;AACjD,mDAA0D;AAC1D,uDAAsG;AACtG,2DAA6E;AAC7E,4DAAsE;AAGtE,2DAAqD;AAGrD,MAAa,8BAA+B,SAAQ,KAAK;IACxD;QACC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QACpF,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC9C,CAAC;CACD;AALD,wEAKC;
|
|
1
|
+
{"version":3,"file":"Scope.js","sourceRoot":"","sources":["../../../core/components/Scope.ts"],"names":[],"mappings":"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"}
|