@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.3
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/{resources/ResourceInterfaceV2.js → components/Logger.js} +1 -1
- 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 +17 -10
- 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/ResourceInterface.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 +12 -4
- 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 +265 -73
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/security/keys.js +11 -12
- 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 +52 -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 +2 -1
- package/dist/utility/lmdb/commonUtility.js +20 -13
- package/dist/utility/lmdb/commonUtility.js.map +1 -1
- 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 +35 -16
- 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/Resources.ts +162 -0
- package/resources/RocksIndexStore.ts +70 -0
- package/resources/RocksTransactionLogStore.ts +352 -0
- package/resources/Table.ts +4531 -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 +733 -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 +596 -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-C1G-Jo6n.js +37 -0
- package/studio/web/assets/index-C1G-Jo6n.js.map +1 -0
- package/studio/web/assets/index-D-CahN0-.js +2 -0
- package/studio/web/assets/index-D-CahN0-.js.map +1 -0
- package/studio/web/assets/index-DxlZI0PX.js +235 -0
- package/studio/web/assets/index-DxlZI0PX.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-BUXDDqq9.js +266 -0
- package/studio/web/assets/index.lazy-BUXDDqq9.js.map +1 -0
- package/studio/web/assets/profiler-CU93QiSW.js +2 -0
- package/studio/web/assets/profiler-CU93QiSW.js.map +1 -0
- package/studio/web/assets/react-redux-B8k9Ep7e.js +6 -0
- package/studio/web/assets/react-redux-B8k9Ep7e.js.map +1 -0
- package/studio/web/assets/startRecording-DFeBXGk6.js +3 -0
- package/studio/web/assets/startRecording-DFeBXGk6.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 +130 -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/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/ResourceInterfaceV2.d.ts +0 -21
- package/dist/resources/ResourceInterfaceV2.js.map +0 -1
- package/dist/resources/ResourceV2.d.ts +0 -30
- package/dist/resources/ResourceV2.js +0 -27
- package/dist/resources/ResourceV2.js.map +0 -1
- 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,95 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbUtils = require('../utility/common_utils.js');
|
|
4
|
+
const hdbTerms = require('../utility/hdbTerms.ts');
|
|
5
|
+
const schemaRegex = /^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/;
|
|
6
|
+
const Joi = require('joi');
|
|
7
|
+
|
|
8
|
+
const commonValidators = {
|
|
9
|
+
schema_format: {
|
|
10
|
+
pattern: schemaRegex,
|
|
11
|
+
message: 'names cannot include backticks or forward slashes',
|
|
12
|
+
},
|
|
13
|
+
schema_length: {
|
|
14
|
+
minimum: 1,
|
|
15
|
+
maximum: 250,
|
|
16
|
+
tooLong: 'cannot exceed 250 characters',
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
// A Joi schema that can be used to validate hdb schemas and tables.
|
|
21
|
+
const hdbSchemaTable = Joi.alternatives(
|
|
22
|
+
Joi.string()
|
|
23
|
+
.min(1)
|
|
24
|
+
.max(commonValidators.schema_length.maximum)
|
|
25
|
+
.pattern(schemaRegex)
|
|
26
|
+
.messages({ 'string.pattern.base': '{:#label} ' + commonValidators.schema_format.message }),
|
|
27
|
+
Joi.number(),
|
|
28
|
+
Joi.array()
|
|
29
|
+
).required();
|
|
30
|
+
|
|
31
|
+
const hdbDatabase = Joi.alternatives(
|
|
32
|
+
Joi.string()
|
|
33
|
+
.min(1)
|
|
34
|
+
.max(commonValidators.schema_length.maximum)
|
|
35
|
+
.pattern(schemaRegex)
|
|
36
|
+
.messages({ 'string.pattern.base': '{:#label} ' + commonValidators.schema_format.message }),
|
|
37
|
+
Joi.number()
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
const hdbTable = Joi.alternatives(
|
|
41
|
+
Joi.string()
|
|
42
|
+
.min(1)
|
|
43
|
+
.max(commonValidators.schema_length.maximum)
|
|
44
|
+
.pattern(schemaRegex)
|
|
45
|
+
.messages({ 'string.pattern.base': '{:#label} ' + commonValidators.schema_format.message }),
|
|
46
|
+
Joi.number()
|
|
47
|
+
).required();
|
|
48
|
+
|
|
49
|
+
function checkValidTable(propertyName, value) {
|
|
50
|
+
if (!value) return `'${propertyName}' is required`;
|
|
51
|
+
if (typeof value !== 'string') return `'${propertyName}' must be a string`;
|
|
52
|
+
if (!value.length) return `'${propertyName}' must be at least one character`;
|
|
53
|
+
if (value.length > commonValidators.schema_length.maximum) return `'${propertyName}' maximum of 250 characters`;
|
|
54
|
+
if (!schemaRegex.test(value)) return `'${propertyName}' has illegal characters`;
|
|
55
|
+
return '';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function validateSchemaExists(value, helpers) {
|
|
59
|
+
if (!hdbUtils.doesSchemaExist(value)) {
|
|
60
|
+
return helpers.message(`Database '${value}' does not exist`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function validateTableExists(value, helpers) {
|
|
67
|
+
const schema = helpers.state.ancestors[0].schema;
|
|
68
|
+
if (!hdbUtils.doesTableExist(schema, value)) {
|
|
69
|
+
return helpers.message(`Table '${value}' does not exist`);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function validateSchemaName(value, helpers) {
|
|
76
|
+
if (value.toLowerCase() === hdbTerms.SYSTEM_SCHEMA_NAME) {
|
|
77
|
+
return helpers.message(
|
|
78
|
+
`'subscriptions[${helpers.state.path[1]}]' invalid database name, '${hdbTerms.SYSTEM_SCHEMA_NAME}' name is reserved`
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
module.exports = {
|
|
86
|
+
commonValidators,
|
|
87
|
+
schemaRegex,
|
|
88
|
+
hdbSchemaTable,
|
|
89
|
+
validateSchemaExists,
|
|
90
|
+
validateTableExists,
|
|
91
|
+
validateSchemaName,
|
|
92
|
+
checkValidTable,
|
|
93
|
+
hdbDatabase,
|
|
94
|
+
hdbTable,
|
|
95
|
+
};
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const Joi = require('joi');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
const { boolean, string, number, array } = Joi.types();
|
|
7
|
+
const { totalmem } = require('os');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
const hdbLogger = require('../utility/logging/harper_logger.js');
|
|
10
|
+
const hdbUtils = require('../utility/common_utils.js');
|
|
11
|
+
const hdbTerms = require('../utility/hdbTerms.ts');
|
|
12
|
+
const validator = require('./validationWrapper.js');
|
|
13
|
+
|
|
14
|
+
const DEFAULT_LOG_FOLDER = 'log';
|
|
15
|
+
const DEFAULT_COMPONENTS_FOLDER = 'components';
|
|
16
|
+
const INVALID_SIZE_UNIT_MSG = 'Invalid logging.rotation.maxSize unit. Available units are G, M or K';
|
|
17
|
+
const INVALID_INTERVAL_UNIT_MSG = 'Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)';
|
|
18
|
+
const INVALID_MAX_SIZE_VALUE_MSG =
|
|
19
|
+
"Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'";
|
|
20
|
+
const INVALID_INTERVAL_VALUE_MSG =
|
|
21
|
+
"Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'";
|
|
22
|
+
const UNDEFINED_OPS_API = 'rootPath config parameter is undefined';
|
|
23
|
+
|
|
24
|
+
const portConstraints = Joi.alternatives([number.min(0), string])
|
|
25
|
+
.optional()
|
|
26
|
+
.empty(null);
|
|
27
|
+
const routeConstraints = Joi.alternatives([
|
|
28
|
+
array
|
|
29
|
+
.items(
|
|
30
|
+
string,
|
|
31
|
+
{
|
|
32
|
+
host: string.required(),
|
|
33
|
+
port: portConstraints,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
hostname: string.required(),
|
|
37
|
+
port: portConstraints,
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
.empty(null),
|
|
41
|
+
array.items(string),
|
|
42
|
+
]);
|
|
43
|
+
|
|
44
|
+
let hdbRoot;
|
|
45
|
+
let skipFsVal = false;
|
|
46
|
+
|
|
47
|
+
module.exports = {
|
|
48
|
+
configValidator,
|
|
49
|
+
routesValidator,
|
|
50
|
+
routeConstraints,
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
function configValidator(configJson, skipFsValidation = false) {
|
|
54
|
+
skipFsVal = skipFsValidation;
|
|
55
|
+
hdbRoot = configJson.rootPath;
|
|
56
|
+
if (hdbUtils.isEmpty(hdbRoot)) {
|
|
57
|
+
throw UNDEFINED_OPS_API;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const enabledConstraints = boolean.optional();
|
|
61
|
+
const threadsConstraints = number.min(0).max(1000).empty(null).default(setDefaultThreads);
|
|
62
|
+
const rootConstraints = string
|
|
63
|
+
.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/, 'directory path')
|
|
64
|
+
.empty(null)
|
|
65
|
+
.default(setDefaultRoot);
|
|
66
|
+
const pemFileConstraints = string.optional().empty(null);
|
|
67
|
+
|
|
68
|
+
const storagePathConstraints = Joi.custom(validatePath).empty(null).default(setDefaultRoot);
|
|
69
|
+
const tlsConstraints = Joi.object({
|
|
70
|
+
certificate: pemFileConstraints,
|
|
71
|
+
certificateAuthority: pemFileConstraints,
|
|
72
|
+
privateKey: pemFileConstraints,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const configSchema = Joi.object({
|
|
76
|
+
authentication: Joi.alternatives(
|
|
77
|
+
Joi.object({
|
|
78
|
+
authorizeLocal: boolean,
|
|
79
|
+
cacheTTL: number.required(),
|
|
80
|
+
cookie: Joi.object({
|
|
81
|
+
domains: array.items(string).optional(),
|
|
82
|
+
expires: string.optional(),
|
|
83
|
+
}),
|
|
84
|
+
enableSessions: boolean,
|
|
85
|
+
hashFunction: string.valid('md5', 'sha256', 'argon2id').optional().empty(null),
|
|
86
|
+
}),
|
|
87
|
+
boolean
|
|
88
|
+
).optional(),
|
|
89
|
+
analytics: Joi.object({
|
|
90
|
+
aggregatePeriod: number,
|
|
91
|
+
replicate: boolean.optional(),
|
|
92
|
+
}),
|
|
93
|
+
replication: Joi.object({
|
|
94
|
+
hostname: Joi.alternatives(string, number).optional().empty(null),
|
|
95
|
+
url: string.optional().empty(null),
|
|
96
|
+
port: portConstraints,
|
|
97
|
+
securePort: portConstraints,
|
|
98
|
+
routes: array.optional().empty(null),
|
|
99
|
+
databases: Joi.alternatives(string, array),
|
|
100
|
+
enableRootCAs: boolean.optional(),
|
|
101
|
+
copyTablesToCatchUp: boolean.optional(),
|
|
102
|
+
}).optional(),
|
|
103
|
+
componentsRoot: rootConstraints.optional(),
|
|
104
|
+
localStudio: Joi.object({
|
|
105
|
+
enabled: enabledConstraints,
|
|
106
|
+
}).required(),
|
|
107
|
+
logging: Joi.object({
|
|
108
|
+
auditAuthEvents: Joi.object({
|
|
109
|
+
logFailed: boolean,
|
|
110
|
+
logSuccessful: boolean,
|
|
111
|
+
}),
|
|
112
|
+
file: boolean.required(),
|
|
113
|
+
level: Joi.valid('notify', 'fatal', 'error', 'warn', 'info', 'debug', 'trace'),
|
|
114
|
+
rotation: Joi.object({
|
|
115
|
+
enabled: boolean.optional(),
|
|
116
|
+
compress: boolean.optional(),
|
|
117
|
+
interval: string.custom(validateRotationInterval).optional().empty(null),
|
|
118
|
+
maxSize: string.custom(validateRotationMaxSize).optional().empty(null),
|
|
119
|
+
path: string.optional().empty(null).default(setDefaultRoot),
|
|
120
|
+
}).required(),
|
|
121
|
+
root: rootConstraints,
|
|
122
|
+
stdStreams: boolean.required(),
|
|
123
|
+
auditLog: boolean.required(),
|
|
124
|
+
}).required(),
|
|
125
|
+
operationsApi: Joi.object({
|
|
126
|
+
network: Joi.object({
|
|
127
|
+
cors: boolean.optional(),
|
|
128
|
+
corsAccessList: array.optional(),
|
|
129
|
+
headersTimeout: number.min(1).optional(),
|
|
130
|
+
keepAliveTimeout: number.min(1).optional(),
|
|
131
|
+
port: portConstraints,
|
|
132
|
+
domainSocket: Joi.optional().empty('hdb/operations-server').default(setDefaultRoot),
|
|
133
|
+
securePort: portConstraints,
|
|
134
|
+
timeout: number.min(1).optional(),
|
|
135
|
+
}).optional(),
|
|
136
|
+
tls: Joi.alternatives([Joi.array().items(tlsConstraints), tlsConstraints]),
|
|
137
|
+
}).required(),
|
|
138
|
+
rootPath: string.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/, 'directory path').required(),
|
|
139
|
+
mqtt: Joi.object({
|
|
140
|
+
network: Joi.object({
|
|
141
|
+
port: portConstraints,
|
|
142
|
+
securePort: portConstraints,
|
|
143
|
+
mtls: Joi.alternatives([
|
|
144
|
+
boolean.optional(),
|
|
145
|
+
Joi.object({
|
|
146
|
+
user: string.optional(),
|
|
147
|
+
certificateAuthority: pemFileConstraints,
|
|
148
|
+
required: boolean.optional(),
|
|
149
|
+
}),
|
|
150
|
+
]),
|
|
151
|
+
}).required(),
|
|
152
|
+
webSocket: boolean.optional(),
|
|
153
|
+
requireAuthentication: boolean.optional(),
|
|
154
|
+
}),
|
|
155
|
+
http: Joi.object({
|
|
156
|
+
compressionThreshold: number.optional(),
|
|
157
|
+
cors: boolean.optional(),
|
|
158
|
+
corsAccessList: array.optional(),
|
|
159
|
+
headersTimeout: number.min(1).optional(),
|
|
160
|
+
port: portConstraints,
|
|
161
|
+
securePort: portConstraints,
|
|
162
|
+
maxHeaderSize: number.optional(),
|
|
163
|
+
mtls: Joi.alternatives([
|
|
164
|
+
boolean.optional(),
|
|
165
|
+
Joi.object({
|
|
166
|
+
user: string.optional(),
|
|
167
|
+
certificateAuthority: pemFileConstraints,
|
|
168
|
+
required: boolean.optional(),
|
|
169
|
+
}),
|
|
170
|
+
]),
|
|
171
|
+
threadRange: Joi.alternatives([array.optional(), string.optional()]),
|
|
172
|
+
}).required(),
|
|
173
|
+
threads: Joi.alternatives(
|
|
174
|
+
threadsConstraints.optional(),
|
|
175
|
+
Joi.object({
|
|
176
|
+
count: threadsConstraints.optional(),
|
|
177
|
+
debug: Joi.alternatives(
|
|
178
|
+
boolean.optional(),
|
|
179
|
+
Joi.object({
|
|
180
|
+
startingPort: number.min(1).optional(),
|
|
181
|
+
host: string.optional(),
|
|
182
|
+
waitForDebugger: boolean.optional(),
|
|
183
|
+
})
|
|
184
|
+
),
|
|
185
|
+
maxHeapMemory: number.min(0).optional(),
|
|
186
|
+
})
|
|
187
|
+
),
|
|
188
|
+
storage: Joi.object({
|
|
189
|
+
writeAsync: boolean.required(),
|
|
190
|
+
overlappingSync: boolean.optional(),
|
|
191
|
+
caching: boolean.optional(),
|
|
192
|
+
compression: Joi.alternatives([
|
|
193
|
+
boolean.optional(),
|
|
194
|
+
Joi.object({ dictionary: string.optional(), threshold: number.optional() }),
|
|
195
|
+
]),
|
|
196
|
+
compactOnStart: boolean.optional(),
|
|
197
|
+
compactOnStartKeepBackup: boolean.optional(),
|
|
198
|
+
noReadAhead: boolean.optional(),
|
|
199
|
+
path: storagePathConstraints,
|
|
200
|
+
prefetchWrites: boolean.optional(),
|
|
201
|
+
maxFreeSpaceToLoad: number.optional(),
|
|
202
|
+
maxFreeSpaceToRetain: number.optional(),
|
|
203
|
+
}).required(),
|
|
204
|
+
ignoreScripts: boolean.optional(),
|
|
205
|
+
tls: Joi.alternatives([Joi.array().items(tlsConstraints), tlsConstraints]),
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// Not using the validation wrapper here because we need the result if validation is successful because
|
|
209
|
+
// there is default values set as part of validation.
|
|
210
|
+
return configSchema.validate(configJson, {
|
|
211
|
+
allowUnknown: true,
|
|
212
|
+
abortEarly: false,
|
|
213
|
+
errors: { wrap: { label: "'" } },
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// This function is used to validate existence of paths passed as an argument
|
|
218
|
+
function doesPathExist(pathToCheck) {
|
|
219
|
+
if (skipFsVal) return null;
|
|
220
|
+
let exists = fs.existsSync(pathToCheck);
|
|
221
|
+
if (exists) {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return `Specified path ${pathToCheck} does not exist.`;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function validatePath(value, helpers) {
|
|
229
|
+
Joi.assert(value, string.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/, 'directory path'));
|
|
230
|
+
|
|
231
|
+
const doesExistMsg = doesPathExist(value);
|
|
232
|
+
if (doesExistMsg) {
|
|
233
|
+
return helpers.message(doesExistMsg);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function validateRotationMaxSize(value, helpers) {
|
|
238
|
+
const unit = value.slice(-1);
|
|
239
|
+
if (unit !== 'G' && unit !== 'M' && unit !== 'K') {
|
|
240
|
+
return helpers.message(INVALID_SIZE_UNIT_MSG);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const size = value.slice(0, -1);
|
|
244
|
+
if (isNaN(parseInt(size))) {
|
|
245
|
+
return helpers.message(INVALID_MAX_SIZE_VALUE_MSG);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return value;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function validateRotationInterval(value, helpers) {
|
|
252
|
+
const unit = value.slice(-1);
|
|
253
|
+
if (unit !== 'D' && unit !== 'H' && unit !== 'M') {
|
|
254
|
+
return helpers.message(INVALID_INTERVAL_UNIT_MSG);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const size = value.slice(0, -1);
|
|
258
|
+
if (isNaN(parseInt(size))) {
|
|
259
|
+
return helpers.message(INVALID_INTERVAL_VALUE_MSG);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return value;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
function setDefaultThreads(parent, helpers) {
|
|
266
|
+
const configParam = helpers.state.path.join('.');
|
|
267
|
+
let processors = os.cpus().length;
|
|
268
|
+
|
|
269
|
+
// default to one less than the number of logical CPU/processors so we can have good concurrency with the
|
|
270
|
+
// ingest process and any extra processes (jobs, reply, etc.).
|
|
271
|
+
let numProcesses = processors - 1;
|
|
272
|
+
// But if only two or less processors, keep two processes so we have some level of concurrency fairness
|
|
273
|
+
if (numProcesses <= 2) numProcesses = 2;
|
|
274
|
+
let availableMemory = process.constrainedMemory?.() || totalmem(); // used constrained memory if it is available
|
|
275
|
+
// and lower than total memory
|
|
276
|
+
availableMemory = Math.round(Math.min(availableMemory, totalmem()) / 1000000);
|
|
277
|
+
// (available memory -750MB) / 300MB
|
|
278
|
+
numProcesses = Math.max(Math.min(numProcesses, Math.round((availableMemory - 750) / 300)), 1);
|
|
279
|
+
hdbLogger.info(
|
|
280
|
+
`Detected ${processors} cores and ${availableMemory}MB on this machine, defaulting ${configParam} to ${numProcesses}`
|
|
281
|
+
);
|
|
282
|
+
return numProcesses;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Sets a default root for a config param.
|
|
287
|
+
* @param parent
|
|
288
|
+
* @param helpers
|
|
289
|
+
* @returns {string}
|
|
290
|
+
*/
|
|
291
|
+
function setDefaultRoot(parent, helpers) {
|
|
292
|
+
// For some reason Joi is still calling set default when value is not null.
|
|
293
|
+
// For that reason we do this check.
|
|
294
|
+
const configParam = helpers.state.path.join('.');
|
|
295
|
+
if (!hdbUtils.isEmpty(helpers.original) && configParam !== 'operationsApi.network.domainSocket') {
|
|
296
|
+
return helpers.original;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
if (hdbUtils.isEmpty(hdbRoot)) {
|
|
300
|
+
throw new Error(`Error setting default root for: ${configParam}. HDB root is not defined`);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
switch (configParam) {
|
|
304
|
+
case 'componentsRoot':
|
|
305
|
+
return path.join(hdbRoot, DEFAULT_COMPONENTS_FOLDER);
|
|
306
|
+
case 'logging.root':
|
|
307
|
+
return path.join(hdbRoot, DEFAULT_LOG_FOLDER);
|
|
308
|
+
case 'storage.path':
|
|
309
|
+
const legacyStoragePath = path.join(hdbRoot, hdbTerms.LEGACY_DATABASES_DIR_NAME);
|
|
310
|
+
if (fs.existsSync(legacyStoragePath)) return legacyStoragePath;
|
|
311
|
+
return path.join(hdbRoot, hdbTerms.DATABASES_DIR_NAME);
|
|
312
|
+
case 'logging.rotation.path':
|
|
313
|
+
return path.join(hdbRoot, DEFAULT_LOG_FOLDER);
|
|
314
|
+
case 'operationsApi.network.domainSocket':
|
|
315
|
+
return configParam == null ? null : path.join(hdbRoot, 'operations-server');
|
|
316
|
+
default:
|
|
317
|
+
throw new Error(`Error setting default root for config parameter: ${configParam}. Unrecognized config parameter`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Validates just the routes array.
|
|
323
|
+
* @param routesArray
|
|
324
|
+
* @returns {*}
|
|
325
|
+
*/
|
|
326
|
+
function routesValidator(routesArray) {
|
|
327
|
+
const schema = Joi.object({
|
|
328
|
+
routes: routeConstraints,
|
|
329
|
+
});
|
|
330
|
+
return validator.validateBySchema({ routes: routesArray }, schema);
|
|
331
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const validator = require('./validationWrapper.js');
|
|
2
|
+
const Joi = require('joi');
|
|
3
|
+
const { hdbTable, hdbDatabase } = require('./common_validators.js');
|
|
4
|
+
|
|
5
|
+
const deleteSchema = Joi.object({
|
|
6
|
+
schema: hdbDatabase,
|
|
7
|
+
database: hdbDatabase,
|
|
8
|
+
table: hdbTable,
|
|
9
|
+
hash_values: Joi.array().required(),
|
|
10
|
+
ids: Joi.array(),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
module.exports = function (deleteObject) {
|
|
14
|
+
return validator.validateBySchema(deleteObject, deleteSchema);
|
|
15
|
+
};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
const clone = require('clone');
|
|
2
|
+
const validator = require('./validationWrapper.js');
|
|
3
|
+
const commonUtils = require('../utility/common_utils.js');
|
|
4
|
+
const hdbTerms = require('../utility/hdbTerms.ts');
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const joi = require('joi');
|
|
7
|
+
const { string } = joi.types();
|
|
8
|
+
const { hdbErrors, handleHDBError } = require('../utility/errors/hdbError.js');
|
|
9
|
+
const { HTTP_STATUS_CODES } = hdbErrors;
|
|
10
|
+
|
|
11
|
+
const { commonValidators } = require('./common_validators.js');
|
|
12
|
+
|
|
13
|
+
const isRequiredString = ' is required';
|
|
14
|
+
|
|
15
|
+
const actions = ['insert', 'update', 'upsert'];
|
|
16
|
+
const constraints = {
|
|
17
|
+
database: {
|
|
18
|
+
presence: false,
|
|
19
|
+
format: commonValidators.schema_format,
|
|
20
|
+
length: commonValidators.schema_length,
|
|
21
|
+
},
|
|
22
|
+
schema: {
|
|
23
|
+
presence: false,
|
|
24
|
+
format: commonValidators.schema_format,
|
|
25
|
+
length: commonValidators.schema_length,
|
|
26
|
+
},
|
|
27
|
+
table: {
|
|
28
|
+
presence: true,
|
|
29
|
+
format: commonValidators.schema_format,
|
|
30
|
+
length: commonValidators.schema_length,
|
|
31
|
+
},
|
|
32
|
+
action: {
|
|
33
|
+
inclusion: {
|
|
34
|
+
within: actions,
|
|
35
|
+
message: 'is required and must be either insert, update, or upsert',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
file_path: {},
|
|
39
|
+
csv_url: {
|
|
40
|
+
url: {
|
|
41
|
+
allowLocal: true,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
data: {},
|
|
45
|
+
passthrough_headers: {},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const baseJoiSchema = {
|
|
49
|
+
schema: string.required(),
|
|
50
|
+
table: string.required(),
|
|
51
|
+
action: string.valid('insert', 'update', 'upsert'),
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const { AWS_ACCESS_KEY, AWS_SECRET, AWS_BUCKET, AWS_FILE_KEY, REGION } = hdbTerms.S3_BUCKET_AUTH_KEYS;
|
|
55
|
+
|
|
56
|
+
const s3Constraints = {
|
|
57
|
+
s3: {
|
|
58
|
+
presence: true,
|
|
59
|
+
},
|
|
60
|
+
[`s3.${AWS_ACCESS_KEY}`]: {
|
|
61
|
+
presence: true,
|
|
62
|
+
type: 'String',
|
|
63
|
+
},
|
|
64
|
+
[`s3.${AWS_SECRET}`]: {
|
|
65
|
+
presence: true,
|
|
66
|
+
type: 'String',
|
|
67
|
+
},
|
|
68
|
+
[`s3.${AWS_BUCKET}`]: {
|
|
69
|
+
presence: true,
|
|
70
|
+
type: 'String',
|
|
71
|
+
},
|
|
72
|
+
[`s3.${AWS_FILE_KEY}`]: {
|
|
73
|
+
presence: true,
|
|
74
|
+
type: 'String',
|
|
75
|
+
hasValidFileExt: ['.csv', '.json'],
|
|
76
|
+
},
|
|
77
|
+
[`s3.${REGION}`]: {
|
|
78
|
+
presence: true,
|
|
79
|
+
type: 'String',
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const dataConstraints = clone(constraints);
|
|
84
|
+
dataConstraints.data.presence = {
|
|
85
|
+
message: isRequiredString,
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const fileConstraints = clone(constraints);
|
|
89
|
+
fileConstraints.file_path.presence = {
|
|
90
|
+
message: isRequiredString,
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const s3FileConstraints = Object.assign(clone(constraints), s3Constraints);
|
|
94
|
+
|
|
95
|
+
const urlSchema = clone(baseJoiSchema);
|
|
96
|
+
urlSchema.csv_url = string.uri().messages({ 'string.uri': "'csv_url' must be a valid url" }).required();
|
|
97
|
+
urlSchema.passthrough_headers = joi.object();
|
|
98
|
+
|
|
99
|
+
function dataObject(object) {
|
|
100
|
+
let validateRes = validator.validateObject(object, dataConstraints);
|
|
101
|
+
return postValidateChecks(object, validateRes);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function urlObject(object) {
|
|
105
|
+
let validateRes = validator.validateBySchema(object, joi.object(urlSchema));
|
|
106
|
+
return postValidateChecks(object, validateRes);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function fileObject(object) {
|
|
110
|
+
let validateRes = validator.validateObject(object, fileConstraints);
|
|
111
|
+
return postValidateChecks(object, validateRes);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function s3FileObject(object) {
|
|
115
|
+
let validateRes = validator.validateObject(object, s3FileConstraints);
|
|
116
|
+
return postValidateChecks(object, validateRes);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Post validate module checks, confirms schema and table exist.
|
|
121
|
+
* If file upload - checks that it exists, permissions and size.
|
|
122
|
+
*/
|
|
123
|
+
function postValidateChecks(object, validateRes) {
|
|
124
|
+
if (!validateRes) {
|
|
125
|
+
let msg = commonUtils.checkGlobalSchemaTable(object.schema, object.table);
|
|
126
|
+
if (msg) {
|
|
127
|
+
return handleHDBError(new Error(), msg, HTTP_STATUS_CODES.BAD_REQUEST);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (object.operation === hdbTerms.OPERATIONS_ENUM.CSV_FILE_LOAD) {
|
|
131
|
+
try {
|
|
132
|
+
fs.accessSync(object.file_path, fs.constants.R_OK | fs.constants.F_OK);
|
|
133
|
+
} catch (err) {
|
|
134
|
+
if (err.code === hdbTerms.NODE_ERROR_CODES.ENOENT) {
|
|
135
|
+
return handleHDBError(err, `No such file or directory ${err.path}`, HTTP_STATUS_CODES.BAD_REQUEST);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (err.code === hdbTerms.NODE_ERROR_CODES.EACCES) {
|
|
139
|
+
return handleHDBError(err, `Permission denied ${err.path}`, HTTP_STATUS_CODES.BAD_REQUEST);
|
|
140
|
+
}
|
|
141
|
+
return handleHDBError(err);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return validateRes;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
module.exports = {
|
|
149
|
+
dataObject,
|
|
150
|
+
urlObject,
|
|
151
|
+
fileObject,
|
|
152
|
+
s3FileObject,
|
|
153
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const { hdbTable, hdbDatabase } = require('./common_validators.js');
|
|
2
|
+
const validator = require('./validationWrapper.js');
|
|
3
|
+
const Joi = require('joi');
|
|
4
|
+
const INVALID_ATTRIBUTE_NAMES = {
|
|
5
|
+
undefined: 'undefined',
|
|
6
|
+
null: 'null',
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const customRecordsVal = (value, helpers) => {
|
|
10
|
+
const attributes = Object.keys(value);
|
|
11
|
+
const attributesLength = attributes.length;
|
|
12
|
+
let errorMsg = undefined;
|
|
13
|
+
for (let i = 0; i < attributesLength; i++) {
|
|
14
|
+
const attribute = attributes[i];
|
|
15
|
+
if (!attribute || attribute.length === 0 || INVALID_ATTRIBUTE_NAMES[attribute] !== undefined) {
|
|
16
|
+
if (errorMsg === undefined) {
|
|
17
|
+
errorMsg = `Invalid attribute name: '${attribute}'`;
|
|
18
|
+
} else {
|
|
19
|
+
errorMsg += `. Invalid attribute name: '${attribute}'`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (errorMsg) {
|
|
25
|
+
return helpers.message(errorMsg);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return value;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const insertSchema = Joi.object({
|
|
32
|
+
database: hdbDatabase,
|
|
33
|
+
schema: hdbDatabase,
|
|
34
|
+
table: hdbTable,
|
|
35
|
+
records: Joi.array().items(Joi.object().custom(customRecordsVal)).required(),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
module.exports = function (insertObject) {
|
|
39
|
+
return validator.validateBySchema(insertObject, insertSchema);
|
|
40
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Joi = require('joi');
|
|
4
|
+
const { string, number } = Joi.types();
|
|
5
|
+
const fs = require('fs-extra');
|
|
6
|
+
const hdbTerms = require('../utility/hdbTerms.ts');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const validator = require('../validation/validationWrapper.js');
|
|
9
|
+
|
|
10
|
+
module.exports = installValidator;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Used to validate any command or environment variables used passed to install.
|
|
14
|
+
* @param param
|
|
15
|
+
* @returns {*}
|
|
16
|
+
*/
|
|
17
|
+
function installValidator(param) {
|
|
18
|
+
const installSchema = Joi.object({
|
|
19
|
+
[hdbTerms.INSTALL_PROMPTS.ROOTPATH]: Joi.custom(validateRootAvailable),
|
|
20
|
+
[hdbTerms.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]: Joi.alternatives([number.min(0), string]).allow(
|
|
21
|
+
'null',
|
|
22
|
+
null
|
|
23
|
+
),
|
|
24
|
+
[hdbTerms.INSTALL_PROMPTS.TC_AGREEMENT]: string.valid('yes', 'YES', 'Yes'),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
return validator.validateBySchema(param, installSchema);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function validateRootAvailable(value, helpers) {
|
|
31
|
+
if (
|
|
32
|
+
fs.existsSync(path.join(value, 'system/hdb_user/data.mdb')) ||
|
|
33
|
+
fs.existsSync(path.join(value, 'system/hdb_user.mdb'))
|
|
34
|
+
) {
|
|
35
|
+
return helpers.message(`'${value}' is already in use. Please enter a different path.`);
|
|
36
|
+
}
|
|
37
|
+
}
|