@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.1
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/bin/BinObjects.js +17 -0
- package/bin/cliOperations.js +157 -0
- package/bin/copyDb.ts +280 -0
- package/bin/harper.js +156 -0
- package/bin/install.js +15 -0
- package/bin/lite.js +5 -0
- package/bin/restart.js +201 -0
- package/bin/run.js +409 -0
- package/bin/status.js +65 -0
- package/bin/stop.js +22 -0
- package/bin/upgrade.js +134 -0
- package/components/Application.ts +646 -0
- package/components/ApplicationScope.ts +49 -0
- package/components/Component.ts +53 -0
- package/components/ComponentV1.ts +342 -0
- package/components/DEFAULT_CONFIG.ts +18 -0
- package/components/EntryHandler.ts +227 -0
- package/components/Logger.ts +14 -0
- package/components/OptionsWatcher.ts +354 -0
- package/components/PluginModule.ts +6 -0
- package/components/Scope.ts +329 -0
- package/components/componentLoader.ts +529 -0
- package/components/deriveCommonPatternBase.ts +31 -0
- package/components/deriveGlobOptions.ts +44 -0
- package/components/deriveURLPath.ts +57 -0
- package/components/operations.js +658 -0
- package/components/operationsValidation.js +246 -0
- package/components/packageComponent.ts +39 -0
- package/components/requestRestart.ts +26 -0
- package/components/resolveBaseURLPath.ts +38 -0
- package/components/status/ComponentStatus.ts +110 -0
- package/components/status/ComponentStatusRegistry.ts +251 -0
- package/components/status/api.ts +153 -0
- package/components/status/crossThread.ts +405 -0
- package/components/status/errors.ts +152 -0
- package/components/status/index.ts +44 -0
- package/components/status/internal.ts +65 -0
- package/components/status/registry.ts +12 -0
- package/components/status/types.ts +96 -0
- package/config/RootConfigWatcher.ts +59 -0
- package/config/configHelpers.ts +11 -0
- package/config/configUtils.js +967 -0
- package/config/harperConfigEnvVars.ts +641 -0
- package/dataLayer/CreateAttributeObject.js +25 -0
- package/dataLayer/CreateTableObject.js +11 -0
- package/dataLayer/DataLayerObjects.js +43 -0
- package/dataLayer/DeleteBeforeObject.js +22 -0
- package/dataLayer/DeleteObject.js +25 -0
- package/dataLayer/DropAttributeObject.js +11 -0
- package/dataLayer/GetBackupObject.js +22 -0
- package/dataLayer/InsertObject.js +24 -0
- package/dataLayer/ReadAuditLogObject.js +24 -0
- package/dataLayer/SQLSearch.js +1335 -0
- package/dataLayer/SearchByConditionsObject.js +61 -0
- package/dataLayer/SearchByHashObject.js +21 -0
- package/dataLayer/SearchObject.js +45 -0
- package/dataLayer/SqlSearchObject.js +14 -0
- package/dataLayer/UpdateObject.js +23 -0
- package/dataLayer/UpsertObject.js +23 -0
- package/dataLayer/bulkLoad.js +813 -0
- package/dataLayer/dataObjects/BulkLoadObjects.js +27 -0
- package/dataLayer/dataObjects/UpsertObject.js +23 -0
- package/dataLayer/delete.js +164 -0
- package/dataLayer/export.js +381 -0
- package/dataLayer/getBackup.js +40 -0
- package/dataLayer/harperBridge/BridgeMethods.js +81 -0
- package/dataLayer/harperBridge/ResourceBridge.ts +633 -0
- package/dataLayer/harperBridge/bridgeUtility/insertUpdateReturnObj.js +28 -0
- package/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +88 -0
- package/dataLayer/harperBridge/harperBridge.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/LMDBBridge.js +119 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +19 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +112 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +67 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +31 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +94 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +98 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +89 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +109 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +107 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +137 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +35 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +111 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +28 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +29 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +207 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +156 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +30 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbTransaction.js +19 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +64 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +70 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +22 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBDeleteTransactionObject.js +23 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBInsertTransactionObject.js +22 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBTransactionObject.js +23 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpdateTransactionObject.js +24 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpsertTransactionObject.js +24 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +25 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +157 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +94 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +39 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +34 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +100 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +371 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +109 -0
- package/dataLayer/hdbInfoController.js +254 -0
- package/dataLayer/insert.js +266 -0
- package/dataLayer/readAuditLog.js +59 -0
- package/dataLayer/schema.js +366 -0
- package/dataLayer/schemaDescribe.js +289 -0
- package/dataLayer/search.js +60 -0
- package/dataLayer/transaction.js +17 -0
- package/dataLayer/update.js +124 -0
- package/dist/components/Logger.d.ts +12 -0
- package/dist/components/Logger.js +3 -0
- package/dist/components/Logger.js.map +1 -0
- package/dist/components/Scope.d.ts +14 -4
- package/dist/components/Scope.js +18 -10
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/componentLoader.js +16 -9
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/operations.js +2 -2
- package/dist/components/operations.js.map +1 -1
- package/dist/config/configUtils.d.ts +1 -1
- package/dist/config/configUtils.js +1 -1
- package/dist/config/configUtils.js.map +1 -1
- package/dist/dataLayer/CreateTableObject.d.ts +2 -2
- package/dist/dataLayer/CreateTableObject.js +2 -2
- package/dist/dataLayer/CreateTableObject.js.map +1 -1
- package/dist/dataLayer/delete.d.ts +1 -1
- package/dist/dataLayer/schema.js +6 -5
- package/dist/dataLayer/schema.js.map +1 -1
- package/dist/dataLayer/schemaDescribe.js +1 -1
- package/dist/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/resources/DatabaseTransaction.d.ts +1 -1
- package/dist/resources/IterableEventQueue.d.ts +1 -1
- package/dist/resources/LMDBTransaction.d.ts +5 -1
- package/dist/resources/Resource.d.ts +1 -1
- package/dist/resources/RocksIndexStore.d.ts +3 -3
- package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
- package/dist/resources/Table.d.ts +15 -6
- package/dist/resources/Table.js +4 -1
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/read.js +32 -22
- package/dist/resources/analytics/read.js.map +1 -1
- package/dist/resources/analytics/write.js +3 -6
- package/dist/resources/analytics/write.js.map +1 -1
- package/dist/resources/auditStore.d.ts +3 -3
- package/dist/resources/blob.d.ts +25 -2
- package/dist/resources/databases.d.ts +12 -2
- package/dist/resources/databases.js +22 -19
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/search.js +11 -5
- package/dist/resources/search.js.map +1 -1
- package/dist/resources/transaction.d.ts +2 -1
- package/dist/security/auth.js +1 -1
- package/dist/security/auth.js.map +1 -1
- package/dist/security/cryptoHash.d.ts +2 -2
- package/dist/security/jsLoader.js +243 -66
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/security/keys.js +4 -5
- package/dist/security/keys.js.map +1 -1
- package/dist/security/user.js +3 -3
- package/dist/security/user.js.map +1 -1
- package/dist/server/REST.js +16 -2
- package/dist/server/REST.js.map +1 -1
- package/dist/server/Server.d.ts +2 -1
- package/dist/server/Server.js.map +1 -1
- package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
- package/dist/server/fastifyRoutes.js +2 -0
- package/dist/server/fastifyRoutes.js.map +1 -1
- package/dist/server/http.js +12 -6
- package/dist/server/http.js.map +1 -1
- package/dist/server/jobs/JobObject.d.ts +3 -3
- package/dist/server/loadRootComponents.js +1 -0
- package/dist/server/loadRootComponents.js.map +1 -1
- package/dist/server/operationsServer.js +3 -1
- package/dist/server/operationsServer.js.map +1 -1
- package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
- package/dist/server/serverHelpers/Request.d.ts +5 -5
- package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
- package/dist/server/threads/manageThreads.d.ts +2 -2
- package/dist/server/threads/manageThreads.js +50 -35
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/server/threads/socketRouter.d.ts +1 -1
- package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
- package/dist/utility/AWS/AWSConnector.d.ts +3 -2
- package/dist/utility/common_utils.d.ts +3 -3
- package/dist/utility/environment/systemInformation.d.ts +1 -0
- package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
- package/dist/utility/globalSchema.d.ts +1 -1
- package/dist/utility/hdbTerms.d.ts +3 -0
- package/dist/utility/hdbTerms.js +3 -0
- package/dist/utility/hdbTerms.js.map +1 -1
- package/dist/utility/installation.d.ts +2 -4
- package/dist/utility/installation.js.map +1 -1
- package/dist/utility/lmdb/commonUtility.d.ts +1 -0
- package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
- package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
- package/dist/utility/lmdb/searchUtility.d.ts +2 -1
- package/dist/utility/lmdb/writeUtility.d.ts +1 -0
- package/dist/utility/logging/harper_logger.d.ts +6 -6
- package/dist/utility/processManagement/processManagement.d.ts +1 -1
- package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
- package/dist/validation/common_validators.d.ts +4 -3
- package/dist/validation/configValidator.d.ts +3 -2
- package/index.d.ts +56 -0
- package/index.js +41 -0
- package/json/systemSchema.json +373 -0
- package/launchServiceScripts/launchHarperDB.js +3 -0
- package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
- package/package.json +21 -3
- package/resources/DatabaseTransaction.ts +378 -0
- package/resources/ErrorResource.ts +57 -0
- package/resources/IterableEventQueue.ts +94 -0
- package/resources/LMDBTransaction.ts +349 -0
- package/resources/RecordEncoder.ts +702 -0
- package/resources/RequestTarget.ts +134 -0
- package/resources/Resource.ts +789 -0
- package/resources/ResourceInterface.ts +221 -0
- package/resources/ResourceInterfaceV2.ts +53 -0
- package/resources/ResourceV2.ts +67 -0
- package/resources/Resources.ts +162 -0
- package/resources/RocksIndexStore.ts +70 -0
- package/resources/RocksTransactionLogStore.ts +352 -0
- package/resources/Table.ts +4527 -0
- package/resources/analytics/hostnames.ts +72 -0
- package/resources/analytics/metadata.ts +10 -0
- package/resources/analytics/read.ts +252 -0
- package/resources/analytics/write.ts +803 -0
- package/resources/auditStore.ts +556 -0
- package/resources/blob.ts +1268 -0
- package/resources/crdt.ts +125 -0
- package/resources/dataLoader.ts +527 -0
- package/resources/databases.ts +1290 -0
- package/resources/graphql.ts +221 -0
- package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
- package/resources/indexes/customIndexes.ts +7 -0
- package/resources/indexes/vector.ts +38 -0
- package/resources/jsResource.ts +86 -0
- package/resources/loadEnv.ts +22 -0
- package/resources/login.ts +18 -0
- package/resources/openApi.ts +409 -0
- package/resources/registrationDeprecated.ts +8 -0
- package/resources/replayLogs.ts +136 -0
- package/resources/roles.ts +98 -0
- package/resources/search.ts +1301 -0
- package/resources/tracked.ts +584 -0
- package/resources/transaction.ts +89 -0
- package/resources/transactionBroadcast.ts +258 -0
- package/security/auth.ts +376 -0
- package/security/certificateVerification/certificateVerificationSource.ts +84 -0
- package/security/certificateVerification/configValidation.ts +107 -0
- package/security/certificateVerification/crlVerification.ts +623 -0
- package/security/certificateVerification/index.ts +121 -0
- package/security/certificateVerification/ocspVerification.ts +148 -0
- package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
- package/security/certificateVerification/types.ts +128 -0
- package/security/certificateVerification/verificationConfig.ts +138 -0
- package/security/certificateVerification/verificationUtils.ts +447 -0
- package/security/cryptoHash.js +42 -0
- package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
- package/security/data_objects/PermissionResponseObject.js +115 -0
- package/security/data_objects/PermissionTableResponseObject.js +20 -0
- package/security/fastifyAuth.js +169 -0
- package/security/impersonation.ts +160 -0
- package/security/jsLoader.ts +716 -0
- package/security/keys.js +948 -0
- package/security/permissionsTranslator.js +300 -0
- package/security/role.js +218 -0
- package/security/tokenAuthentication.ts +228 -0
- package/security/user.ts +449 -0
- package/server/DurableSubscriptionsSession.ts +503 -0
- package/server/REST.ts +407 -0
- package/server/Server.ts +89 -0
- package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
- package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
- package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
- package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
- package/server/fastifyRoutes.ts +205 -0
- package/server/graphqlQuerying.ts +700 -0
- package/server/http.ts +640 -0
- package/server/itc/serverHandlers.js +161 -0
- package/server/itc/utility/ITCEventObject.js +10 -0
- package/server/jobs/JobObject.js +24 -0
- package/server/jobs/jobProcess.js +69 -0
- package/server/jobs/jobRunner.js +162 -0
- package/server/jobs/jobs.js +304 -0
- package/server/loadRootComponents.js +44 -0
- package/server/mqtt.ts +485 -0
- package/server/nodeName.ts +75 -0
- package/server/operationsServer.ts +313 -0
- package/server/serverHelpers/Headers.ts +108 -0
- package/server/serverHelpers/JSONStream.ts +269 -0
- package/server/serverHelpers/OperationFunctionObject.ts +13 -0
- package/server/serverHelpers/Request.ts +158 -0
- package/server/serverHelpers/contentTypes.ts +637 -0
- package/server/serverHelpers/requestTimePlugin.js +57 -0
- package/server/serverHelpers/serverHandlers.js +148 -0
- package/server/serverHelpers/serverUtilities.ts +473 -0
- package/server/serverRegistry.ts +8 -0
- package/server/static.ts +187 -0
- package/server/status/definitions.ts +37 -0
- package/server/status/index.ts +125 -0
- package/server/storageReclamation.ts +93 -0
- package/server/threads/itc.js +89 -0
- package/server/threads/manageThreads.js +594 -0
- package/server/threads/socketRouter.ts +360 -0
- package/server/threads/threadServer.js +279 -0
- package/server/throttle.ts +73 -0
- package/sqlTranslator/SelectValidator.js +330 -0
- package/sqlTranslator/alasqlFunctionImporter.js +62 -0
- package/sqlTranslator/deleteTranslator.js +67 -0
- package/sqlTranslator/index.js +242 -0
- package/sqlTranslator/sql_statement_bucket.js +472 -0
- package/static/defaultConfig.yaml +3 -0
- package/studio/web/HDBDogOnly.svg +78 -0
- package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
- package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
- package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
- package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
- package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
- package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
- package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
- package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
- package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
- package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
- package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
- package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
- package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
- package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
- package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
- package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
- package/studio/web/assets/index-BTgXJX9d.js +235 -0
- package/studio/web/assets/index-BTgXJX9d.js.map +1 -0
- package/studio/web/assets/index-C-GXfcup.js +37 -0
- package/studio/web/assets/index-C-GXfcup.js.map +1 -0
- package/studio/web/assets/index-PFlNdimM.js +2 -0
- package/studio/web/assets/index-PFlNdimM.js.map +1 -0
- package/studio/web/assets/index-Y2g_iFpU.css +1 -0
- package/studio/web/assets/index-jiPwkrsB.css +1 -0
- package/studio/web/assets/index.lazy-C3TJZJ4o.js +266 -0
- package/studio/web/assets/index.lazy-C3TJZJ4o.js.map +1 -0
- package/studio/web/assets/profiler-DotzgiCJ.js +2 -0
- package/studio/web/assets/profiler-DotzgiCJ.js.map +1 -0
- package/studio/web/assets/react-redux-VxUEx_mU.js +6 -0
- package/studio/web/assets/react-redux-VxUEx_mU.js.map +1 -0
- package/studio/web/assets/startRecording-B_9J9Csd.js +3 -0
- package/studio/web/assets/startRecording-B_9J9Csd.js.map +1 -0
- package/studio/web/fabric-signup-background.webp +0 -0
- package/studio/web/fabric-signup-text.png +0 -0
- package/studio/web/favicon_purple.png +0 -0
- package/studio/web/github-icon.svg +15 -0
- package/studio/web/harper-fabric_black.png +0 -0
- package/studio/web/harper-fabric_white.png +0 -0
- package/studio/web/harper-studio_white.png +0 -0
- package/studio/web/index.html +16 -0
- package/studio/web/running.css +148 -0
- package/studio/web/running.html +147 -0
- package/studio/web/running.js +111 -0
- package/upgrade/UpgradeObjects.js +13 -0
- package/upgrade/directives/directivesController.js +90 -0
- package/upgrade/directivesManager.js +139 -0
- package/upgrade/upgradePrompt.js +124 -0
- package/upgrade/upgradeUtilities.js +28 -0
- package/utility/AWS/AWSConnector.js +29 -0
- package/utility/OperationFunctionCaller.js +63 -0
- package/utility/assignCmdEnvVariables.js +62 -0
- package/utility/common_utils.js +867 -0
- package/utility/environment/environmentManager.js +208 -0
- package/utility/environment/systemInformation.js +355 -0
- package/utility/errors/commonErrors.js +267 -0
- package/utility/errors/hdbError.js +146 -0
- package/utility/functions/date/dateFunctions.js +65 -0
- package/utility/functions/geo.js +355 -0
- package/utility/functions/sql/alaSQLExtension.js +104 -0
- package/utility/globalSchema.js +35 -0
- package/utility/hdbTerms.ts +819 -0
- package/utility/install/checkJWTTokensExist.js +62 -0
- package/utility/install/harperdb.conf +15 -0
- package/utility/install/harperdb.service +14 -0
- package/utility/install/installer.js +635 -0
- package/utility/installation.ts +30 -0
- package/utility/lmdb/DBIDefinition.js +20 -0
- package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
- package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
- package/utility/lmdb/OpenDBIObject.js +31 -0
- package/utility/lmdb/OpenEnvironmentObject.js +41 -0
- package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
- package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
- package/utility/lmdb/cleanLMDBMap.js +65 -0
- package/utility/lmdb/commonUtility.js +119 -0
- package/utility/lmdb/deleteUtility.js +128 -0
- package/utility/lmdb/environmentUtility.js +477 -0
- package/utility/lmdb/searchCursorFunctions.js +187 -0
- package/utility/lmdb/searchUtility.js +918 -0
- package/utility/lmdb/terms.js +57 -0
- package/utility/lmdb/writeUtility.js +407 -0
- package/utility/logging/harper_logger.js +876 -0
- package/utility/logging/logRotator.js +157 -0
- package/utility/logging/logger.ts +24 -0
- package/utility/logging/readLog.js +355 -0
- package/utility/logging/transactionLog.js +57 -0
- package/utility/mount_hdb.js +59 -0
- package/utility/npmUtilities.js +102 -0
- package/utility/operationPermissions.ts +112 -0
- package/utility/operation_authorization.js +836 -0
- package/utility/packageUtils.js +55 -0
- package/utility/password.ts +99 -0
- package/utility/processManagement/processManagement.js +187 -0
- package/utility/processManagement/servicesConfig.js +56 -0
- package/utility/scripts/restartHdb.js +24 -0
- package/utility/scripts/user_data.sh +13 -0
- package/utility/signalling.js +36 -0
- package/utility/terms/certificates.js +81 -0
- package/utility/when.ts +20 -0
- package/v1.d.ts +39 -0
- package/v1.js +41 -0
- package/v2.d.ts +39 -0
- package/v2.js +41 -0
- package/validation/bulkDeleteValidator.js +24 -0
- package/validation/check_permissions.js +19 -0
- package/validation/common_validators.js +95 -0
- package/validation/configValidator.js +331 -0
- package/validation/deleteValidator.js +15 -0
- package/validation/fileLoadValidator.js +153 -0
- package/validation/insertValidator.js +40 -0
- package/validation/installValidator.js +37 -0
- package/validation/readLogValidator.js +64 -0
- package/validation/role_validation.js +320 -0
- package/validation/schemaMetadataValidator.js +42 -0
- package/validation/searchValidator.js +166 -0
- package/validation/statusValidator.ts +66 -0
- package/validation/transactionLogValidator.js +33 -0
- package/validation/user_validation.js +55 -0
- package/validation/validationWrapper.js +105 -0
- package/dist/resources/analytics/profile.d.ts +0 -2
- package/dist/resources/analytics/profile.js +0 -144
- package/dist/resources/analytics/profile.js.map +0 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const { join, dirname } = require('node:path');
|
|
2
|
+
const { existsSync, readFileSync } = require('node:fs');
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A naive find-up implementation to find the root package.json, and
|
|
6
|
+
* subsequently the root directory of the package. In theory we could require
|
|
7
|
+
* package.json directly (`require('../../package.json')`), but that would not
|
|
8
|
+
* give us the root directory of the repo, which is needed for other things.
|
|
9
|
+
* Furthermore, when this is eventually converted to TS, we should consider
|
|
10
|
+
* using `import('../../package.json')` as that will give type-safe access to
|
|
11
|
+
* the package.json file.
|
|
12
|
+
*
|
|
13
|
+
* The purpose of doing this instead of cobbling together a path directly is
|
|
14
|
+
* that in development mode this file will be resolved from its actual path
|
|
15
|
+
* `/utility/packageUtils.js`, but in production, it will be bundled into the
|
|
16
|
+
* built output and the path will be different. Since builds will not
|
|
17
|
+
* automatically transform a path like that (it will only do so for
|
|
18
|
+
* requires/imports), we need to stick to directory traversal to find the
|
|
19
|
+
* package root.
|
|
20
|
+
*
|
|
21
|
+
* This function isn't full-proof and could fail in some edge cases. The max
|
|
22
|
+
* iteration check is in place to prevent infinite loops.
|
|
23
|
+
*
|
|
24
|
+
* If we ever encounter this error, we should improve the function to handle
|
|
25
|
+
* the edge case instead of just increasing the `MAX` value.
|
|
26
|
+
*
|
|
27
|
+
* @returns {string} package.json file path
|
|
28
|
+
*/
|
|
29
|
+
function findPackageJson() {
|
|
30
|
+
const MAX = 10;
|
|
31
|
+
let dir = __dirname,
|
|
32
|
+
filePath,
|
|
33
|
+
i = 0;
|
|
34
|
+
while (!existsSync((filePath = join(dir, 'package.json')))) {
|
|
35
|
+
if (dir === (dir = dirname(dir)) || i++ > MAX) throw new Error('Could not find package root');
|
|
36
|
+
}
|
|
37
|
+
return filePath;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const packageJsonPath = findPackageJson();
|
|
41
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The Harper package root directory.
|
|
45
|
+
*
|
|
46
|
+
* Works across dev and prod (built).
|
|
47
|
+
*
|
|
48
|
+
* @type {string}
|
|
49
|
+
*/
|
|
50
|
+
const PACKAGE_ROOT = dirname(packageJsonPath);
|
|
51
|
+
|
|
52
|
+
module.exports = {
|
|
53
|
+
packageJson,
|
|
54
|
+
PACKAGE_ROOT,
|
|
55
|
+
};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as crypto from 'node:crypto';
|
|
2
|
+
import * as argon2 from 'argon2';
|
|
3
|
+
import { get } from './environment/environmentManager.js';
|
|
4
|
+
import { CONFIG_PARAMS } from './hdbTerms.ts';
|
|
5
|
+
const configuredHashFunction = get(CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)?.toLowerCase();
|
|
6
|
+
|
|
7
|
+
const SALT_LENGTH = 16;
|
|
8
|
+
const SALT_LENGTH_MD5 = 9;
|
|
9
|
+
export const HASH_FUNCTION = {
|
|
10
|
+
MD5: 'md5',
|
|
11
|
+
SHA256: 'sha256',
|
|
12
|
+
ARGON2ID: 'argon2id',
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
type HashFunction = (typeof HASH_FUNCTION)[keyof typeof HASH_FUNCTION];
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Generate a secure salt
|
|
19
|
+
* @param len Length of salt (defaults to SALT_LENGTH)
|
|
20
|
+
*/
|
|
21
|
+
function generateSalt(len: number = SALT_LENGTH): string {
|
|
22
|
+
const set = '0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ';
|
|
23
|
+
return Array.from(crypto.randomBytes(len))
|
|
24
|
+
.map((x) => set[x % set.length])
|
|
25
|
+
.join('');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const hashAlgorithms = {
|
|
29
|
+
[HASH_FUNCTION.MD5]: (password: string, salt = undefined) => {
|
|
30
|
+
salt = salt ?? generateSalt(SALT_LENGTH_MD5);
|
|
31
|
+
const hashed = crypto
|
|
32
|
+
.createHash(HASH_FUNCTION.MD5)
|
|
33
|
+
.update(password + salt)
|
|
34
|
+
.digest('hex');
|
|
35
|
+
return salt + hashed;
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
[HASH_FUNCTION.SHA256]: (password: string, salt = undefined) => {
|
|
39
|
+
salt = salt ?? generateSalt(SALT_LENGTH);
|
|
40
|
+
const hashed = crypto
|
|
41
|
+
.createHash(HASH_FUNCTION.SHA256)
|
|
42
|
+
.update(password + salt)
|
|
43
|
+
.digest('hex');
|
|
44
|
+
return salt + hashed;
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
[HASH_FUNCTION.ARGON2ID]: async (password: string) => {
|
|
48
|
+
const salt = generateSalt(SALT_LENGTH);
|
|
49
|
+
const hashed = await argon2.hash(password, {
|
|
50
|
+
type: argon2.argon2id,
|
|
51
|
+
salt: Buffer.from(salt),
|
|
52
|
+
});
|
|
53
|
+
return salt + hashed;
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const validateAlgorithms = {
|
|
58
|
+
[HASH_FUNCTION.MD5]: (storedHash: string, password: string) => {
|
|
59
|
+
const salt = storedHash.slice(0, SALT_LENGTH_MD5);
|
|
60
|
+
return storedHash === hashAlgorithms[HASH_FUNCTION.MD5](password, salt);
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
[HASH_FUNCTION.SHA256]: (storedHash: string, password: string) => {
|
|
64
|
+
const salt = storedHash.slice(0, SALT_LENGTH);
|
|
65
|
+
return storedHash === hashAlgorithms[HASH_FUNCTION.SHA256](password, salt);
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
[HASH_FUNCTION.ARGON2ID]: async (storedHash: string, password: string) => {
|
|
69
|
+
return await argon2.verify(storedHash.slice(SALT_LENGTH), password);
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Create a hash for the given password (MD5, SHA-256 or argon2id)
|
|
75
|
+
* @param password Plain text password
|
|
76
|
+
* @param algorithm Hashing algorithm to use (default: SHA-256)
|
|
77
|
+
*/
|
|
78
|
+
export function hash(
|
|
79
|
+
password: string,
|
|
80
|
+
algorithm: HashFunction = HASH_FUNCTION[configuredHashFunction?.toUpperCase()] ?? HASH_FUNCTION.SHA256
|
|
81
|
+
): string | Promise<string> {
|
|
82
|
+
return hashAlgorithms[algorithm](password);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Validate a password against a stored hash
|
|
87
|
+
* @param storedHash Previously generated hash
|
|
88
|
+
* @param password Plain text password to validate
|
|
89
|
+
* @param algorithm Hashing algorithm to use (default: SHA-256)
|
|
90
|
+
*/
|
|
91
|
+
export function validate(
|
|
92
|
+
storedHash: string,
|
|
93
|
+
password: string,
|
|
94
|
+
algorithm: HashFunction = HASH_FUNCTION[configuredHashFunction?.toUpperCase()] ?? HASH_FUNCTION.SHA256
|
|
95
|
+
): boolean | Promise<boolean> {
|
|
96
|
+
if (!storedHash) return false;
|
|
97
|
+
|
|
98
|
+
return validateAlgorithms[algorithm](storedHash, password);
|
|
99
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbTerms = require('../hdbTerms.ts');
|
|
4
|
+
const servicesConfig = require('./servicesConfig.js');
|
|
5
|
+
const envMangr = require('../environment/environmentManager.js');
|
|
6
|
+
const hdbLogger = require('../../utility/logging/harper_logger.js');
|
|
7
|
+
const { onMessageFromWorkers } = require('../../server/threads/manageThreads.js');
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const path = require('node:path');
|
|
10
|
+
const { setTimeout: delay } = require('node:timers/promises');
|
|
11
|
+
const { execFile, fork } = require('node:child_process');
|
|
12
|
+
|
|
13
|
+
module.exports = {
|
|
14
|
+
start,
|
|
15
|
+
restart,
|
|
16
|
+
kill,
|
|
17
|
+
startService,
|
|
18
|
+
getHdbPid,
|
|
19
|
+
isProcessRunning,
|
|
20
|
+
cleanupChildrenProcesses,
|
|
21
|
+
expectedRestartOfChildren,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
onMessageFromWorkers((message) => {
|
|
25
|
+
if (message.type === 'restart') envMangr.initSync(true);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
let childProcesses = [];
|
|
29
|
+
const MAX_RESTARTS = 10;
|
|
30
|
+
let shuttingDown;
|
|
31
|
+
/**
|
|
32
|
+
* Starts a service
|
|
33
|
+
* @param procConfig
|
|
34
|
+
* @returns void
|
|
35
|
+
*/
|
|
36
|
+
function start(procConfig, noKill = false) {
|
|
37
|
+
const args = typeof procConfig.args === 'string' ? procConfig.args.split(' ') : procConfig.args;
|
|
38
|
+
procConfig.silent = true;
|
|
39
|
+
procConfig.detached = true;
|
|
40
|
+
procConfig.env = {
|
|
41
|
+
...procConfig.env,
|
|
42
|
+
HARPER_PARENT_PROCESS_PID: process.pid.toString(),
|
|
43
|
+
};
|
|
44
|
+
const subprocess = procConfig.script
|
|
45
|
+
? fork(procConfig.script, args, procConfig)
|
|
46
|
+
: execFile(procConfig.binFile, args, procConfig);
|
|
47
|
+
subprocess.name = procConfig.name;
|
|
48
|
+
subprocess.config = procConfig;
|
|
49
|
+
subprocess.on('error', (code, message) => {
|
|
50
|
+
console.error(code, message);
|
|
51
|
+
});
|
|
52
|
+
subprocess.on('exit', async (code) => {
|
|
53
|
+
let index = childProcesses.indexOf(subprocess); // dead, remove it from processes to kill now
|
|
54
|
+
if (index > -1) childProcesses.splice(index, 1);
|
|
55
|
+
if (!shuttingDown && code !== 0) {
|
|
56
|
+
procConfig.restarts = (procConfig.restarts || 0) + 1;
|
|
57
|
+
// restart the child process
|
|
58
|
+
if (procConfig.restarts < MAX_RESTARTS) {
|
|
59
|
+
start(procConfig);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
subprocess.stdout.on('data', (log) => hdbLogger.info(log.toString()));
|
|
65
|
+
subprocess.stderr.on('data', (log) => hdbLogger.error(log.toString()));
|
|
66
|
+
subprocess.unref();
|
|
67
|
+
|
|
68
|
+
// if we are running in standard mode, then we want to clean up our child processes when we exit
|
|
69
|
+
if (childProcesses.length === 0) {
|
|
70
|
+
if (!noKill) {
|
|
71
|
+
process.on('exit', cleanupChildrenProcesses);
|
|
72
|
+
process.on('SIGINT', cleanupChildrenProcesses);
|
|
73
|
+
process.on('SIGQUIT', cleanupChildrenProcesses);
|
|
74
|
+
process.on('SIGTERM', cleanupChildrenProcesses);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
childProcesses.push(subprocess);
|
|
78
|
+
}
|
|
79
|
+
function cleanupChildrenProcesses(exit = true) {
|
|
80
|
+
if (shuttingDown) return;
|
|
81
|
+
shuttingDown = true;
|
|
82
|
+
if (childProcesses.length === 0) return;
|
|
83
|
+
hdbLogger.info('Killing child processes...');
|
|
84
|
+
childProcesses.map((proc) => proc.kill());
|
|
85
|
+
if (exit) process.exit(0);
|
|
86
|
+
else return delay(2000); // give these processes some time to exit
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* restart processes
|
|
91
|
+
* @param serviceName
|
|
92
|
+
* @returns {Promise<unknown>}
|
|
93
|
+
*/
|
|
94
|
+
function restart(serviceName) {
|
|
95
|
+
expectedRestartOfChildren();
|
|
96
|
+
for (let childProcess of childProcesses) {
|
|
97
|
+
// kill the child process and let it (auto) restart
|
|
98
|
+
if (childProcess.name === serviceName) {
|
|
99
|
+
childProcess.kill();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Reset the restart counts for all child processes because we are doing an intentional restart
|
|
106
|
+
*/
|
|
107
|
+
function expectedRestartOfChildren() {
|
|
108
|
+
for (let childProcess of childProcesses) {
|
|
109
|
+
if (childProcess.config) childProcess.config.restarts = 0; // reset the restart count
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Checks to see if Harper is currently running, returning the pid if it is
|
|
115
|
+
* @returns {number|undefined}
|
|
116
|
+
*/
|
|
117
|
+
function getHdbPid() {
|
|
118
|
+
const harperPath = envMangr.getHdbBasePath();
|
|
119
|
+
if (!harperPath) return;
|
|
120
|
+
const pidFile = path.join(harperPath, hdbTerms.HDB_PID_FILE);
|
|
121
|
+
const hdbPid = readPidFile(pidFile);
|
|
122
|
+
// If the pid file doesn't exist or the pid is the same as the current process, return.
|
|
123
|
+
// In a Docker container, the pid is usually 1, and so if a previous process crashed, there will still
|
|
124
|
+
// be a pid file with 1, even though this process is also 1 (and is running, but is not another harper process).
|
|
125
|
+
if (!hdbPid || hdbPid === process.pid) return;
|
|
126
|
+
if (isProcessRunning(hdbPid)) return hdbPid;
|
|
127
|
+
// return undefined
|
|
128
|
+
}
|
|
129
|
+
function kill() {
|
|
130
|
+
for (let process of childProcesses) {
|
|
131
|
+
process.kill();
|
|
132
|
+
}
|
|
133
|
+
childProcesses = [];
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* start a specific service
|
|
139
|
+
* @param serviceName
|
|
140
|
+
* @returns {Promise<void>}
|
|
141
|
+
*/
|
|
142
|
+
async function startService(serviceName, noKill = false) {
|
|
143
|
+
let startConfig;
|
|
144
|
+
serviceName = serviceName.toLowerCase();
|
|
145
|
+
switch (serviceName) {
|
|
146
|
+
case hdbTerms.PROCESS_DESCRIPTORS.HDB.toLowerCase():
|
|
147
|
+
startConfig = servicesConfig.generateMainServerConfig();
|
|
148
|
+
break;
|
|
149
|
+
default:
|
|
150
|
+
throw new Error(`Start service called with unknown service config: ${serviceName}`);
|
|
151
|
+
}
|
|
152
|
+
start(startConfig, noKill);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Reads the Harper PID file and returns the PID as a number.
|
|
157
|
+
* @param {string} pidFile - The path to the Harper PID file
|
|
158
|
+
* @returns {number|null} - The PID as a number, or null if the file is not found or cannot be read
|
|
159
|
+
*/
|
|
160
|
+
function readPidFile(pidFile) {
|
|
161
|
+
try {
|
|
162
|
+
return Number.parseInt(fs.readFileSync(pidFile, 'utf8'), 10);
|
|
163
|
+
} catch {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Checks if a process is running by attempting to send a signal 0 to the process.
|
|
170
|
+
* @param {number} pid - The process ID to check
|
|
171
|
+
* @returns {boolean} - True if the process is running, false otherwise
|
|
172
|
+
*/
|
|
173
|
+
function isProcessRunning(pid) {
|
|
174
|
+
try {
|
|
175
|
+
// process.kill with signal 0 tests if process exists
|
|
176
|
+
// throws error if process doesn't exist
|
|
177
|
+
process.kill(pid, 0);
|
|
178
|
+
return true;
|
|
179
|
+
} catch (err) {
|
|
180
|
+
// EPERM means process exists but we don't have permission
|
|
181
|
+
// which still indicates the process is running
|
|
182
|
+
if (err.code === 'EPERM') {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbTerms = require('../hdbTerms.ts');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const { PACKAGE_ROOT } = require('../../utility/packageUtils.js');
|
|
6
|
+
const hdbUtils = require('../common_utils.js');
|
|
7
|
+
const SCRIPTS_DIR = path.join(PACKAGE_ROOT, 'utility/scripts');
|
|
8
|
+
const RESTART_SCRIPT = path.join(SCRIPTS_DIR, hdbTerms.HDB_RESTART_SCRIPT);
|
|
9
|
+
|
|
10
|
+
function generateMainServerConfig() {
|
|
11
|
+
const envVars = {
|
|
12
|
+
[hdbTerms.PROCESS_NAME_ENV_PROP]: hdbTerms.PROCESS_DESCRIPTORS.HDB,
|
|
13
|
+
IS_SCRIPTED_SERVICE: true,
|
|
14
|
+
...process.env,
|
|
15
|
+
};
|
|
16
|
+
if (hdbUtils.noBootFile()) envVars[hdbTerms.CONFIG_PARAMS.ROOTPATH.toUpperCase()] = hdbUtils.getEnvCliRootPath();
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
name: hdbTerms.PROCESS_DESCRIPTORS.HDB,
|
|
20
|
+
script: hdbTerms.LAUNCH_SERVICE_SCRIPTS.MAIN,
|
|
21
|
+
exec_mode: 'fork',
|
|
22
|
+
env: envVars,
|
|
23
|
+
execArgv: process.execArgv,
|
|
24
|
+
cwd: PACKAGE_ROOT,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function generateRestart() {
|
|
29
|
+
const envVars = { [hdbTerms.PROCESS_NAME_ENV_PROP]: hdbTerms.PROCESS_DESCRIPTORS.RESTART_HDB };
|
|
30
|
+
if (hdbUtils.noBootFile()) envVars[hdbTerms.CONFIG_PARAMS.ROOTPATH.toUpperCase()] = hdbUtils.getEnvCliRootPath();
|
|
31
|
+
const restartConfig = {
|
|
32
|
+
name: hdbTerms.PROCESS_DESCRIPTORS.RESTART_HDB,
|
|
33
|
+
exec_mode: 'fork',
|
|
34
|
+
env: envVars,
|
|
35
|
+
instances: 1,
|
|
36
|
+
autorestart: false,
|
|
37
|
+
cwd: SCRIPTS_DIR,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
...restartConfig,
|
|
42
|
+
script: RESTART_SCRIPT,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function generateAllServiceConfigs() {
|
|
47
|
+
return {
|
|
48
|
+
apps: [generateMainServerConfig()],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
module.exports = {
|
|
53
|
+
generateAllServiceConfigs,
|
|
54
|
+
generateMainServerConfig,
|
|
55
|
+
generateRestart,
|
|
56
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const pm2Utils = require('../processManagement/processManagement.js');
|
|
4
|
+
const hdbTerms = require('../hdbTerms.ts');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Gets a list of all the running Harper processes and calls reload on each one.
|
|
8
|
+
* NOTE: Calling reload on the "Harper" service was causing only some of the processes to restart so I went with the
|
|
9
|
+
* loop and call each individual process approach. I also needed to be sure all processes had been reloaded before calling delete.
|
|
10
|
+
*/
|
|
11
|
+
(async function () {
|
|
12
|
+
try {
|
|
13
|
+
const hdbProcessMeta = await pm2Utils.describe(hdbTerms.PROCESS_DESCRIPTORS.HDB);
|
|
14
|
+
for (const proc of hdbProcessMeta) {
|
|
15
|
+
await pm2Utils.reload(proc.pm_id);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
await pm2Utils.deleteProcess(hdbTerms.PROCESS_DESCRIPTORS.RESTART_HDB);
|
|
19
|
+
// Once this script has finished reloading all the Harper processes, delete this process from processManagement.
|
|
20
|
+
} catch (err) {
|
|
21
|
+
console.error(err);
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
24
|
+
})();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
echo "##### Start of user_data.sh #####"
|
|
3
|
+
|
|
4
|
+
# Create and enable a 2GB swap file
|
|
5
|
+
dd if=/dev/zero of=/swapfile bs=128M count=16
|
|
6
|
+
chmod 600 /swapfile
|
|
7
|
+
mkswap /swapfile
|
|
8
|
+
swapon /swapfile
|
|
9
|
+
echo "/swapfile swap swap defaults 0 0" | tee -a /etc/fstab
|
|
10
|
+
|
|
11
|
+
# Adjust the per-user open file limits
|
|
12
|
+
echo "ubuntu soft nofile 1000000" | tee -a /etc/security/limits.conf
|
|
13
|
+
echo "ubuntu hard nofile 1000000" | tee -a /etc/security/limits.conf
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbTerms = require('./hdbTerms.ts');
|
|
4
|
+
const hdbLogger = require('../utility/logging/harper_logger.js');
|
|
5
|
+
const ITCEventObject = require('../server/itc/utility/ITCEventObject.js');
|
|
6
|
+
let serverItcHandlers;
|
|
7
|
+
const { sendItcEvent } = require('../server/threads/itc.js');
|
|
8
|
+
|
|
9
|
+
function signalSchemaChange(message) {
|
|
10
|
+
try {
|
|
11
|
+
hdbLogger.debug('signalSchemaChange called with message:', message);
|
|
12
|
+
serverItcHandlers = serverItcHandlers || require('../server/itc/serverHandlers.js');
|
|
13
|
+
const itcEventSchema = new ITCEventObject(hdbTerms.ITC_EVENT_TYPES.SCHEMA, message);
|
|
14
|
+
serverItcHandlers.schema(itcEventSchema);
|
|
15
|
+
return sendItcEvent(itcEventSchema);
|
|
16
|
+
} catch (err) {
|
|
17
|
+
hdbLogger.error(err);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function signalUserChange(message) {
|
|
22
|
+
try {
|
|
23
|
+
hdbLogger.trace('signalUserChange called with message:', message);
|
|
24
|
+
serverItcHandlers = serverItcHandlers || require('../server/itc/serverHandlers.js');
|
|
25
|
+
const itcEventUser = new ITCEventObject(hdbTerms.ITC_EVENT_TYPES.USER, message);
|
|
26
|
+
serverItcHandlers.user(itcEventUser);
|
|
27
|
+
return sendItcEvent(itcEventUser);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
hdbLogger.error(err);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = {
|
|
34
|
+
signalSchemaChange,
|
|
35
|
+
signalUserChange,
|
|
36
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const CERTIFICATE_VALUES = {
|
|
4
|
+
cert: '-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r'.replace(
|
|
5
|
+
/\r/g,
|
|
6
|
+
String.fromCharCode(13, 10)
|
|
7
|
+
),
|
|
8
|
+
key: '-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r'.replace(
|
|
9
|
+
/\r/g,
|
|
10
|
+
String.fromCharCode(13, 10)
|
|
11
|
+
),
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const CERTIFICATE_PEM_NAME = 'certificate.pem';
|
|
15
|
+
const PRIVATEKEY_PEM_NAME = 'privateKey.pem';
|
|
16
|
+
const CA_PEM_NAME = 'caCertificate.pem';
|
|
17
|
+
|
|
18
|
+
const CERT_NAME = {
|
|
19
|
+
'DEFAULT': 'default',
|
|
20
|
+
'DEFAULT-CA': 'default-ca',
|
|
21
|
+
'SERVER': 'server',
|
|
22
|
+
'CA': 'ca',
|
|
23
|
+
'OPERATIONS-API': 'operations-api',
|
|
24
|
+
'OPERATIONS-CA': 'operations-ca',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const CERT_CONFIG_NAME_MAP = {
|
|
28
|
+
tls_certificate: CERT_NAME.SERVER,
|
|
29
|
+
tlsCertificateAuthority: CERT_NAME.CA,
|
|
30
|
+
customFunctions_tls_certificate: CERT_NAME.SERVER,
|
|
31
|
+
customFunctionsTlsCertificateAuthority: CERT_NAME.CA,
|
|
32
|
+
operationsApi_tls_certificate: CERT_NAME['OPERATIONS-API'],
|
|
33
|
+
operationsApiTlsCertificateAuthority: CERT_NAME['OPERATIONS-CA'],
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const CERT_PREFERENCE_APP = {
|
|
37
|
+
[CERT_NAME.SERVER]: 2,
|
|
38
|
+
[CERT_NAME.DEFAULT]: 1,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const CERT_PREFERENCE_OPS = {
|
|
42
|
+
[CERT_NAME['OPERATIONS-API']]: 3,
|
|
43
|
+
[CERT_NAME.SERVER]: 2,
|
|
44
|
+
[CERT_NAME.DEFAULT]: 1,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const CERT_PREFERENCE_REP = {
|
|
48
|
+
[CERT_NAME['OPERATIONS-API']]: 3,
|
|
49
|
+
[CERT_NAME.SERVER]: 2,
|
|
50
|
+
[CERT_NAME.DEFAULT]: 1,
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const CA_CERT_PREFERENCE_REP = {
|
|
54
|
+
[CERT_NAME['OPERATIONS-CA']]: 3,
|
|
55
|
+
[CERT_NAME.CA]: 2,
|
|
56
|
+
[CERT_NAME['DEFAULT-CA']]: 1,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const CA_CERT_PREFERENCE_OPS = {
|
|
60
|
+
[CERT_NAME['OPERATIONS-CA']]: 3,
|
|
61
|
+
[CERT_NAME.CA]: 2,
|
|
62
|
+
[CERT_NAME['DEFAULT-CA']]: 1,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const CA_CERT_PREFERENCE_APP = {
|
|
66
|
+
[CERT_NAME.CA]: 2,
|
|
67
|
+
[CERT_NAME['DEFAULT-CA']]: 1,
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
exports.CERTIFICATE_PEM_NAME = CERTIFICATE_PEM_NAME;
|
|
71
|
+
exports.PRIVATEKEY_PEM_NAME = PRIVATEKEY_PEM_NAME;
|
|
72
|
+
exports.CA_PEM_NAME = CA_PEM_NAME;
|
|
73
|
+
exports.CERT_NAME = CERT_NAME;
|
|
74
|
+
exports.CERT_CONFIG_NAME_MAP = CERT_CONFIG_NAME_MAP;
|
|
75
|
+
exports.CERT_PREFERENCE_APP = CERT_PREFERENCE_APP;
|
|
76
|
+
exports.CERT_PREFERENCE_OPS = CERT_PREFERENCE_OPS;
|
|
77
|
+
exports.CERT_PREFERENCE_REP = CERT_PREFERENCE_REP;
|
|
78
|
+
exports.CA_CERT_PREFERENCE_REP = CA_CERT_PREFERENCE_REP;
|
|
79
|
+
exports.CA_CERT_PREFERENCE_OPS = CA_CERT_PREFERENCE_OPS;
|
|
80
|
+
exports.CA_CERT_PREFERENCE_APP = CA_CERT_PREFERENCE_APP;
|
|
81
|
+
exports.CERTIFICATE_VALUES = CERTIFICATE_VALUES;
|
package/utility/when.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { RequestTarget, RequestTargetOrId } from '../resources/RequestTarget.ts';
|
|
2
|
+
|
|
3
|
+
// wait for a promise or plain object to resolve
|
|
4
|
+
export function when<T, R>(
|
|
5
|
+
value: T | Promise<T>,
|
|
6
|
+
callback: (value: T) => R,
|
|
7
|
+
reject?: (error: any) => void
|
|
8
|
+
): R | Promise<R | void> {
|
|
9
|
+
if ((value as Promise<T>)?.then) {
|
|
10
|
+
return (value as Promise<T>).then(callback, reject);
|
|
11
|
+
}
|
|
12
|
+
return callback(value as T);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function promiseNormalize<T>(returnValue: T | Promise<T>, target: RequestTargetOrId): T | Promise<T> {
|
|
16
|
+
if (!(returnValue as Promise<T>)?.then && !(target as RequestTarget)?.syncAllowed) {
|
|
17
|
+
return Promise.resolve(returnValue);
|
|
18
|
+
}
|
|
19
|
+
return returnValue;
|
|
20
|
+
}
|
package/v1.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export { Resource } from './resources/Resource.ts';
|
|
2
|
+
export type {
|
|
3
|
+
Context,
|
|
4
|
+
Query,
|
|
5
|
+
RequestTargetOrId,
|
|
6
|
+
Session,
|
|
7
|
+
SourceContext,
|
|
8
|
+
SubscriptionRequest,
|
|
9
|
+
} from './resources/ResourceInterface.ts';
|
|
10
|
+
export { ResourceInterface } from './resources/ResourceInterface.ts';
|
|
11
|
+
export type { User } from './security/user.ts';
|
|
12
|
+
export type { RecordObject } from './resources/RecordEncoder.ts';
|
|
13
|
+
export type { IterableEventQueue } from './resources/IterableEventQueue.ts';
|
|
14
|
+
export { RequestTarget } from './resources/RequestTarget.ts';
|
|
15
|
+
export { server } from './server/Server';
|
|
16
|
+
export { tables, databases, type Table } from './resources/databases.ts';
|
|
17
|
+
export type { Attribute } from './resources/Table.ts';
|
|
18
|
+
|
|
19
|
+
import type { Logger } from './components/Logger.ts';
|
|
20
|
+
declare const logger: Logger;
|
|
21
|
+
export { type Logger, logger };
|
|
22
|
+
|
|
23
|
+
export type { Scope } from './components/Scope.ts';
|
|
24
|
+
export type { FilesOption, FilesOptionObject } from './components/deriveGlobOptions.ts';
|
|
25
|
+
export type { FileAndURLPathConfig } from './components/Component.ts';
|
|
26
|
+
export { OptionsWatcher, type Config, type ConfigValue } from './components/OptionsWatcher.ts';
|
|
27
|
+
export {
|
|
28
|
+
EntryHandler,
|
|
29
|
+
type BaseEntry,
|
|
30
|
+
type FileEntry,
|
|
31
|
+
type EntryEvent,
|
|
32
|
+
type AddFileEvent,
|
|
33
|
+
type ChangeFileEvent,
|
|
34
|
+
type UnlinkFileEvent,
|
|
35
|
+
type FileEntryEvent,
|
|
36
|
+
type AddDirectoryEvent,
|
|
37
|
+
type UnlinkDirectoryEvent,
|
|
38
|
+
type DirectoryEntryEvent,
|
|
39
|
+
} from './components/EntryHandler.ts';
|
package/v1.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const workerThreads = require('node:worker_threads');
|
|
2
|
+
if (!workerThreads.isMainThread) {
|
|
3
|
+
// Prevents server from starting in worker threads if this was directly imported from a non-server user thread
|
|
4
|
+
if (!workerThreads.workerData) workerThreads.workerData = {};
|
|
5
|
+
workerThreads.workerData.noServerStart = true;
|
|
6
|
+
}
|
|
7
|
+
const { globals } = require('./server/threads/threadServer.js');
|
|
8
|
+
|
|
9
|
+
// exported types are needed for parsing as well
|
|
10
|
+
exports.Attribute = undefined;
|
|
11
|
+
exports.Config = undefined;
|
|
12
|
+
exports.ConfigValue = undefined;
|
|
13
|
+
exports.Context = undefined;
|
|
14
|
+
exports.FileAndURLPathConfig = undefined;
|
|
15
|
+
exports.FilesOption = undefined;
|
|
16
|
+
exports.FilesOptionObject = undefined;
|
|
17
|
+
exports.IterableEventQueue = undefined;
|
|
18
|
+
exports.Logger = undefined;
|
|
19
|
+
exports.Query = undefined;
|
|
20
|
+
exports.RecordObject = undefined;
|
|
21
|
+
exports.RequestTarget = undefined;
|
|
22
|
+
exports.RequestTargetOrId = undefined;
|
|
23
|
+
exports.Resource = undefined;
|
|
24
|
+
exports.ResourceInterface = undefined;
|
|
25
|
+
exports.Scope = undefined;
|
|
26
|
+
exports.Session = undefined;
|
|
27
|
+
exports.SourceContext = undefined;
|
|
28
|
+
exports.SubscriptionRequest = undefined;
|
|
29
|
+
exports.Table = undefined;
|
|
30
|
+
exports.User = undefined;
|
|
31
|
+
|
|
32
|
+
// these are all overwritten by the globals, but need to be here so that Node's static
|
|
33
|
+
// exports parser can analyze them
|
|
34
|
+
exports.tables = {};
|
|
35
|
+
exports.databases = {};
|
|
36
|
+
exports.getUser = undefined;
|
|
37
|
+
exports.server = {};
|
|
38
|
+
exports.contentTypes = null;
|
|
39
|
+
exports.threads = [];
|
|
40
|
+
exports.logger = {};
|
|
41
|
+
Object.assign(exports, globals);
|