@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,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const LMDBTransactionObject = require('./LMDBTransactionObject.js');
|
|
3
|
+
const OPERATIONS_ENUM = require('../../../../utility/hdbTerms.ts').OPERATIONS_ENUM;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* class to define an update transaction
|
|
7
|
+
*/
|
|
8
|
+
class LMDBUpdateTransactionObject extends LMDBTransactionObject {
|
|
9
|
+
/**
|
|
10
|
+
* @param {Array.<Object>} records - records updated
|
|
11
|
+
* @param {Array.<Object>} originalRecords - original state of records that were updated
|
|
12
|
+
* @param {string} userName - username that executed the transaction
|
|
13
|
+
* @param {number} timestamp - timestamp of transaction
|
|
14
|
+
* @param {[String|Number]} hash_values
|
|
15
|
+
* @param {any} origin
|
|
16
|
+
*/
|
|
17
|
+
constructor(records, originalRecords, userName, timestamp, hash_values, origin = undefined) {
|
|
18
|
+
super(OPERATIONS_ENUM.UPDATE, userName, timestamp, hash_values, origin);
|
|
19
|
+
this.records = records;
|
|
20
|
+
this.original_records = originalRecords;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = LMDBUpdateTransactionObject;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const LMDBTransactionObject = require('./LMDBTransactionObject.js');
|
|
3
|
+
const OPERATIONS_ENUM = require('../../../../utility/hdbTerms.ts').OPERATIONS_ENUM;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* class to define an update transaction
|
|
7
|
+
*/
|
|
8
|
+
class LMDBUpsertTransactionObject extends LMDBTransactionObject {
|
|
9
|
+
/**
|
|
10
|
+
* @param {Array.<Object>} records - records updated
|
|
11
|
+
* @param {Array.<Object>} originalRecords - original state of records that were updated
|
|
12
|
+
* @param {string} userName - username that executed the transaction
|
|
13
|
+
* @param {number} timestamp - timestamp of transaction
|
|
14
|
+
* @param {[String|Number]} hash_values
|
|
15
|
+
* @param {any} origin
|
|
16
|
+
*/
|
|
17
|
+
constructor(records, originalRecords, userName, timestamp, hash_values, origin = undefined) {
|
|
18
|
+
super(OPERATIONS_ENUM.UPSERT, userName, timestamp, hash_values, origin);
|
|
19
|
+
this.records = records;
|
|
20
|
+
this.original_records = originalRecords;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = LMDBUpsertTransactionObject;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* represents the table size entry for a table
|
|
5
|
+
*/
|
|
6
|
+
class TableSizeObject {
|
|
7
|
+
/**
|
|
8
|
+
* @param {String} schema
|
|
9
|
+
* @param {String} table
|
|
10
|
+
* @param {Number} tableSize - data size of the table in bytes
|
|
11
|
+
* @param {Number} recordCount - number of entries in the table
|
|
12
|
+
* @param {Number} transactionLogSize - number of entries in the transaction log
|
|
13
|
+
* @param {Number} transactionLogRecordCount - data size of the transaction log in bytes
|
|
14
|
+
*/
|
|
15
|
+
constructor(schema, table, tableSize = 0, recordCount = 0, transactionLogSize = 0, transactionLogRecordCount = 0) {
|
|
16
|
+
this.schema = schema;
|
|
17
|
+
this.table = table;
|
|
18
|
+
this.table_size = tableSize;
|
|
19
|
+
this.record_count = recordCount;
|
|
20
|
+
this.transaction_log_size = transactionLogSize;
|
|
21
|
+
this.transaction_log_record_count = transactionLogRecordCount;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = TableSizeObject;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
4
|
+
const searchValidator = require('../../../../validation/searchValidator.js');
|
|
5
|
+
const { getSchemaPath } = require('./initializePaths.js');
|
|
6
|
+
|
|
7
|
+
module.exports = initialize;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* @param searchObject
|
|
12
|
+
* @returns {*}
|
|
13
|
+
*/
|
|
14
|
+
function initialize(searchObject) {
|
|
15
|
+
const validationError = searchValidator(searchObject, 'hashes');
|
|
16
|
+
if (validationError) {
|
|
17
|
+
throw validationError;
|
|
18
|
+
}
|
|
19
|
+
let envBasePath = getSchemaPath(searchObject.schema, searchObject.table);
|
|
20
|
+
return environmentUtility.openEnvironment(envBasePath, searchObject.table);
|
|
21
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
4
|
+
const hdbUtils = require('../../../../utility/common_utils.js');
|
|
5
|
+
const env = require('../../../../utility/environment/environmentManager.js');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const minimist = require('minimist');
|
|
8
|
+
const fs = require('fs-extra');
|
|
9
|
+
const _ = require('lodash');
|
|
10
|
+
env.initSync();
|
|
11
|
+
|
|
12
|
+
const { CONFIG_PARAMS, DATABASES_PARAM_CONFIG, SYSTEM_SCHEMA_NAME } = hdbTerms;
|
|
13
|
+
let BASE_SCHEMA_PATH = undefined;
|
|
14
|
+
let SYSTEM_SCHEMA_PATH = undefined;
|
|
15
|
+
let TRANSACTION_STORE_PATH = undefined;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* when HDB is not yet installed we do not yet know the base path and an error is thrown if we do a standard const, so we create a getter
|
|
19
|
+
* @returns {string|*}
|
|
20
|
+
*/
|
|
21
|
+
function getBaseSchemaPath() {
|
|
22
|
+
if (BASE_SCHEMA_PATH !== undefined) {
|
|
23
|
+
return BASE_SCHEMA_PATH;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (env.getHdbBasePath() !== undefined) {
|
|
27
|
+
BASE_SCHEMA_PATH =
|
|
28
|
+
env.get(CONFIG_PARAMS.STORAGE_PATH) || path.join(env.getHdbBasePath(), hdbTerms.DATABASES_DIR_NAME);
|
|
29
|
+
return BASE_SCHEMA_PATH;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* when HDB is not yet installed we do not yet know the base path and an error is thrown if we do a standard const, so we create a getter
|
|
35
|
+
* @returns {string|*}
|
|
36
|
+
*/
|
|
37
|
+
function getSystemSchemaPath() {
|
|
38
|
+
if (SYSTEM_SCHEMA_PATH !== undefined) {
|
|
39
|
+
return SYSTEM_SCHEMA_PATH;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (env.getHdbBasePath() !== undefined) {
|
|
43
|
+
SYSTEM_SCHEMA_PATH = getSchemaPath(SYSTEM_SCHEMA_NAME);
|
|
44
|
+
return SYSTEM_SCHEMA_PATH;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getTransactionAuditStoreBasePath() {
|
|
49
|
+
if (TRANSACTION_STORE_PATH !== undefined) {
|
|
50
|
+
return TRANSACTION_STORE_PATH;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (env.getHdbBasePath() !== undefined) {
|
|
54
|
+
TRANSACTION_STORE_PATH =
|
|
55
|
+
env.get(hdbTerms.CONFIG_PARAMS.STORAGE_AUDIT_PATH) ||
|
|
56
|
+
path.join(env.getHdbBasePath(), hdbTerms.TRANSACTIONS_DIR_NAME);
|
|
57
|
+
return TRANSACTION_STORE_PATH;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function getTransactionAuditStorePath(schema, table) {
|
|
62
|
+
let schemaConfig = env.get(CONFIG_PARAMS.DATABASES)?.[schema];
|
|
63
|
+
return (
|
|
64
|
+
(table && schemaConfig?.tables?.[table]?.auditPath) ||
|
|
65
|
+
schemaConfig?.auditPath ||
|
|
66
|
+
path.join(getTransactionAuditStoreBasePath(), schema.toString())
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function getSchemaPath(schema, table) {
|
|
71
|
+
schema = schema.toString();
|
|
72
|
+
table = table ? table.toString() : table;
|
|
73
|
+
let schemaConfig = env.get(hdbTerms.CONFIG_PARAMS.DATABASES)?.[schema];
|
|
74
|
+
return (table && schemaConfig?.tables?.[table]?.path) || schemaConfig?.path || path.join(getBaseSchemaPath(), schema);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* It is possible to set where the system schema/table files reside. This function will check for CLI/env vars
|
|
79
|
+
* on install and update accordingly.
|
|
80
|
+
* @param schema
|
|
81
|
+
* @param table
|
|
82
|
+
* @returns {string|string|*}
|
|
83
|
+
*/
|
|
84
|
+
function initSystemSchemaPaths(schema, table) {
|
|
85
|
+
schema = schema.toString();
|
|
86
|
+
table = table.toString();
|
|
87
|
+
|
|
88
|
+
// Check to see if there are any CLI or env args related to schema/table path
|
|
89
|
+
const args = process.env;
|
|
90
|
+
Object.assign(args, minimist(process.argv));
|
|
91
|
+
|
|
92
|
+
const schemaConfJson = args[CONFIG_PARAMS.DATABASES.toUpperCase()];
|
|
93
|
+
if (schemaConfJson) {
|
|
94
|
+
let schemasConf;
|
|
95
|
+
try {
|
|
96
|
+
schemasConf = JSON.parse(schemaConfJson);
|
|
97
|
+
} catch (err) {
|
|
98
|
+
if (!hdbUtils.isObject(schemaConfJson)) throw err;
|
|
99
|
+
schemasConf = schemaConfJson;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
for (const schemaConf of schemasConf) {
|
|
103
|
+
const systemSchemaConf = schemaConf[SYSTEM_SCHEMA_NAME];
|
|
104
|
+
if (!systemSchemaConf) continue;
|
|
105
|
+
let schemasObj = env.get(CONFIG_PARAMS.DATABASES);
|
|
106
|
+
schemasObj = schemasObj ?? {};
|
|
107
|
+
|
|
108
|
+
// If path var exists for system table add it to schemas prop and return path.
|
|
109
|
+
const systemTablePath = systemSchemaConf?.tables?.[table]?.[DATABASES_PARAM_CONFIG.PATH];
|
|
110
|
+
if (systemTablePath) {
|
|
111
|
+
_.set(
|
|
112
|
+
schemasObj,
|
|
113
|
+
[SYSTEM_SCHEMA_NAME, DATABASES_PARAM_CONFIG.TABLES, table, DATABASES_PARAM_CONFIG.PATH],
|
|
114
|
+
systemTablePath
|
|
115
|
+
);
|
|
116
|
+
env.setProperty(CONFIG_PARAMS.DATABASES, schemasObj);
|
|
117
|
+
return systemTablePath;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// If path exists for system schema add it to schemas prop and return path.
|
|
121
|
+
const systemSchemaPath = systemSchemaConf?.[DATABASES_PARAM_CONFIG.PATH];
|
|
122
|
+
if (systemSchemaPath) {
|
|
123
|
+
_.set(schemasObj, [SYSTEM_SCHEMA_NAME, DATABASES_PARAM_CONFIG.PATH], systemSchemaPath);
|
|
124
|
+
env.setProperty(CONFIG_PARAMS.DATABASES, schemasObj);
|
|
125
|
+
return systemSchemaPath;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// If storagePath is passed use that to determine location
|
|
131
|
+
const storagePath = args[CONFIG_PARAMS.STORAGE_PATH.toUpperCase()];
|
|
132
|
+
if (storagePath) {
|
|
133
|
+
if (!fs.pathExistsSync(storagePath)) throw new Error(storagePath + ' does not exist');
|
|
134
|
+
const storageSchemaPath = path.join(storagePath, schema);
|
|
135
|
+
fs.mkdirsSync(storageSchemaPath);
|
|
136
|
+
env.setProperty(CONFIG_PARAMS.STORAGE_PATH, storagePath);
|
|
137
|
+
|
|
138
|
+
return storageSchemaPath;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Default to default location
|
|
142
|
+
return getSystemSchemaPath();
|
|
143
|
+
}
|
|
144
|
+
function resetPaths() {
|
|
145
|
+
BASE_SCHEMA_PATH = undefined;
|
|
146
|
+
SYSTEM_SCHEMA_PATH = undefined;
|
|
147
|
+
TRANSACTION_STORE_PATH = undefined;
|
|
148
|
+
}
|
|
149
|
+
module.exports = {
|
|
150
|
+
getBaseSchemaPath,
|
|
151
|
+
getSystemSchemaPath,
|
|
152
|
+
getTransactionAuditStorePath,
|
|
153
|
+
getTransactionAuditStoreBasePath,
|
|
154
|
+
getSchemaPath,
|
|
155
|
+
initSystemSchemaPaths,
|
|
156
|
+
resetPaths,
|
|
157
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hUtils = require('../../../../utility/common_utils.js');
|
|
4
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
5
|
+
const logger = require('../../../../utility/logging/harper_logger.js');
|
|
6
|
+
const lmdbCreateAttribute = require('../lmdbMethods/lmdbCreateAttribute.js');
|
|
7
|
+
const LMDBCreateAttributeObject = require('./LMDBCreateAttributeObject.js');
|
|
8
|
+
const signalling = require('../../../../utility/signalling.js');
|
|
9
|
+
const { SchemaEventMsg } = require('../../../../server/threads/itc.js');
|
|
10
|
+
|
|
11
|
+
const ATTRIBUTE_ALREADY_EXISTS = 'already exists in';
|
|
12
|
+
|
|
13
|
+
module.exports = lmdbCheckForNewAttributes;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Uses a utility function to check if there are any new attributes that dont exist. Utility function
|
|
17
|
+
* references the global schema.
|
|
18
|
+
* @param hdbAuthHeader
|
|
19
|
+
* @param tableSchema
|
|
20
|
+
* @param dataAttributes
|
|
21
|
+
*/
|
|
22
|
+
async function lmdbCheckForNewAttributes(hdbAuthHeader, tableSchema, dataAttributes) {
|
|
23
|
+
if (hUtils.isEmptyOrZeroLength(dataAttributes)) {
|
|
24
|
+
return dataAttributes;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let rawAttributes = [];
|
|
28
|
+
if (!hUtils.isEmptyOrZeroLength(tableSchema.attributes)) {
|
|
29
|
+
tableSchema.attributes.forEach((attribute) => {
|
|
30
|
+
rawAttributes.push(attribute.attribute);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let new_attributes = dataAttributes.filter((attribute) => rawAttributes.indexOf(attribute) < 0);
|
|
35
|
+
|
|
36
|
+
if (new_attributes.length === 0) {
|
|
37
|
+
return new_attributes;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
await Promise.all(
|
|
41
|
+
new_attributes.map(async (attribute) => {
|
|
42
|
+
await createNewAttribute(hdbAuthHeader, tableSchema.schema, tableSchema.name, attribute);
|
|
43
|
+
})
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
return new_attributes;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* check the existing schema and creates new attributes based on what the incoming records have
|
|
51
|
+
* @param hdbAuthHeader
|
|
52
|
+
* @param schema
|
|
53
|
+
* @param table
|
|
54
|
+
* @param attribute
|
|
55
|
+
*/
|
|
56
|
+
async function createNewAttribute(hdbAuthHeader, schema, table, attribute) {
|
|
57
|
+
let attributeObject = new LMDBCreateAttributeObject(schema, table, attribute, undefined, true);
|
|
58
|
+
|
|
59
|
+
if (hdbAuthHeader) {
|
|
60
|
+
attributeObject.hdb_auth_header = hdbAuthHeader;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
await createAttribute(attributeObject);
|
|
65
|
+
} catch (e) {
|
|
66
|
+
//if the attribute already exists we do not want to stop the insert
|
|
67
|
+
if (typeof e === 'object' && e.message !== undefined && e.message.includes(ATTRIBUTE_ALREADY_EXISTS)) {
|
|
68
|
+
logger.warn(`attribute ${schema}.${table}.${attribute} already exists`);
|
|
69
|
+
} else {
|
|
70
|
+
throw e;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
*
|
|
77
|
+
* @param {LMDBCreateAttributeObject} createAttributeObject
|
|
78
|
+
* @returns {Promise<*>}
|
|
79
|
+
*/
|
|
80
|
+
async function createAttribute(createAttributeObject) {
|
|
81
|
+
let attributeStructure;
|
|
82
|
+
attributeStructure = await lmdbCreateAttribute(createAttributeObject);
|
|
83
|
+
signalling.signalSchemaChange(
|
|
84
|
+
new SchemaEventMsg(
|
|
85
|
+
process.pid,
|
|
86
|
+
hdbTerms.OPERATIONS_ENUM.CREATE_ATTRIBUTE,
|
|
87
|
+
createAttributeObject.schema,
|
|
88
|
+
createAttributeObject.table,
|
|
89
|
+
createAttributeObject.attribute
|
|
90
|
+
)
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
return attributeStructure;
|
|
94
|
+
}
|
package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
5
|
+
const { getTransactionAuditStorePath } = require('../lmdbUtility/initializePaths.js');
|
|
6
|
+
const lmdbTerms = require('../../../../utility/lmdb/terms.js');
|
|
7
|
+
// eslint-disable-next-line no-unused-vars
|
|
8
|
+
const CreateTableObject = require('../../../CreateTableObject.js');
|
|
9
|
+
|
|
10
|
+
module.exports = createTransactionsAuditEnvironment;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Creates the environment to hold transactions
|
|
14
|
+
* @param {CreateTableObject} tableCreateObj
|
|
15
|
+
* @returns {Promise<lmdb.RootDatabase>}
|
|
16
|
+
*/
|
|
17
|
+
async function createTransactionsAuditEnvironment(tableCreateObj) {
|
|
18
|
+
let env;
|
|
19
|
+
try {
|
|
20
|
+
//create transactions environment for table
|
|
21
|
+
let transactionPath = getTransactionAuditStorePath(tableCreateObj.schema, tableCreateObj.table);
|
|
22
|
+
await fs.mkdirp(transactionPath);
|
|
23
|
+
env = await environmentUtility.createEnvironment(transactionPath, tableCreateObj.table, true);
|
|
24
|
+
} catch (e) {
|
|
25
|
+
e.message = `unable to create transactions audit environment for ${tableCreateObj.schema}.${tableCreateObj.table} due to: ${e.message}`;
|
|
26
|
+
throw e;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
//create dbis for transactions environment
|
|
31
|
+
environmentUtility.createDBI(env, lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP, false, true);
|
|
32
|
+
environmentUtility.createDBI(env, lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE, true, false);
|
|
33
|
+
environmentUtility.createDBI(env, lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME, true, false);
|
|
34
|
+
} catch (e) {
|
|
35
|
+
e.message = `unable to create dbi for ${tableCreateObj.schema}.${tableCreateObj.table} due to: ${e.message}`;
|
|
36
|
+
throw e;
|
|
37
|
+
}
|
|
38
|
+
return env;
|
|
39
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const TableSizeObject = require('./TableSizeObject.js');
|
|
4
|
+
const log = require('../../../../utility/logging/harper_logger.js');
|
|
5
|
+
const { getDatabases } = require('../../../../resources/databases.ts');
|
|
6
|
+
|
|
7
|
+
module.exports = lmdbGetTableSize;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* calculates the number of entries & data size in bytes for a table & its transaction log
|
|
11
|
+
* @param tableObject
|
|
12
|
+
* @returns {Promise<TableSizeObject>}
|
|
13
|
+
*/
|
|
14
|
+
async function lmdbGetTableSize(tableObject) {
|
|
15
|
+
let tableStats = new TableSizeObject();
|
|
16
|
+
try {
|
|
17
|
+
//get the table record count
|
|
18
|
+
let table = getDatabases()[tableObject.schema]?.[tableObject.name];
|
|
19
|
+
|
|
20
|
+
let dbiStat = table.primaryStore.getStats();
|
|
21
|
+
|
|
22
|
+
//get the txn log record count
|
|
23
|
+
let txnDbiStat = table.auditStore?.getStats();
|
|
24
|
+
|
|
25
|
+
tableStats.schema = tableObject.schema;
|
|
26
|
+
tableStats.table = tableObject.name;
|
|
27
|
+
tableStats.record_count = dbiStat.entryCount;
|
|
28
|
+
tableStats.transaction_log_record_count = txnDbiStat.entryCount;
|
|
29
|
+
} catch (e) {
|
|
30
|
+
log.warn(`unable to stat table dbi due to ${e}`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return tableStats;
|
|
34
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line no-unused-vars
|
|
4
|
+
const InsertObject = require('../../../InsertObject.js');
|
|
5
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
6
|
+
const hdbUtils = require('../../../../utility/common_utils.js');
|
|
7
|
+
const log = require('../../../../utility/logging/harper_logger.js');
|
|
8
|
+
const uuid = require('uuid');
|
|
9
|
+
const { handleHDBError, hdbErrors } = require('../../../../utility/errors/hdbError.js');
|
|
10
|
+
const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
|
|
11
|
+
|
|
12
|
+
module.exports = processRows;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* parses the records and validates the hash value for each row as well as adding updated/created time stamps
|
|
16
|
+
* @param {InsertObject} insertObj
|
|
17
|
+
* @param {Array.<String>} attributes
|
|
18
|
+
* @param {String} hash_attribute
|
|
19
|
+
*/
|
|
20
|
+
function processRows(insertObj, attributes, hash_attribute) {
|
|
21
|
+
for (let x = 0; x < attributes.length; x++) {
|
|
22
|
+
validateAttribute(attributes[x]);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let { records } = insertObj;
|
|
26
|
+
|
|
27
|
+
// Iterates through array of record objects and validates their hash
|
|
28
|
+
for (let x = 0; x < records.length; x++) {
|
|
29
|
+
let record = records[x];
|
|
30
|
+
validateHash(record, hash_attribute, insertObj.operation);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
processRows.validateAttribute = validateAttribute;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Validates that attribute is under max size and is not null, undefined or empty.
|
|
37
|
+
* @param attribute
|
|
38
|
+
*/
|
|
39
|
+
function validateAttribute(attribute) {
|
|
40
|
+
if (Buffer.byteLength(String(attribute)) > hdbTerms.INSERT_MAX_CHARACTER_SIZE) {
|
|
41
|
+
throw handleHDBError(
|
|
42
|
+
new Error(),
|
|
43
|
+
HDB_ERROR_MSGS.ATTR_NAME_LENGTH_ERR(attribute),
|
|
44
|
+
HTTP_STATUS_CODES.BAD_REQUEST,
|
|
45
|
+
undefined,
|
|
46
|
+
undefined,
|
|
47
|
+
true
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (hdbUtils.isEmptyOrZeroLength(attribute) || hdbUtils.isEmpty(attribute.trim())) {
|
|
52
|
+
throw handleHDBError(
|
|
53
|
+
new Error(),
|
|
54
|
+
HDB_ERROR_MSGS.ATTR_NAME_NULLISH_ERR,
|
|
55
|
+
HTTP_STATUS_CODES.BAD_REQUEST,
|
|
56
|
+
undefined,
|
|
57
|
+
undefined,
|
|
58
|
+
true
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Validates hash value exists and under max char size. If the operation is 'insert' and the hash doesn't exist it
|
|
65
|
+
* will create one.
|
|
66
|
+
* @param record
|
|
67
|
+
* @param hash_attribute
|
|
68
|
+
* @param operation
|
|
69
|
+
*/
|
|
70
|
+
function validateHash(record, hash_attribute, operation) {
|
|
71
|
+
if (!record.hasOwnProperty(hash_attribute) || hdbUtils.isEmptyOrZeroLength(record[hash_attribute])) {
|
|
72
|
+
if (operation === hdbTerms.OPERATIONS_ENUM.INSERT || operation === hdbTerms.OPERATIONS_ENUM.UPSERT) {
|
|
73
|
+
record[hash_attribute] = uuid.v4();
|
|
74
|
+
//return here since the rest of the validations do not apply
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
log.error('Update transaction aborted due to record with no hash value:', record);
|
|
79
|
+
throw handleHDBError(
|
|
80
|
+
new Error(),
|
|
81
|
+
HDB_ERROR_MSGS.RECORD_MISSING_HASH_ERR,
|
|
82
|
+
HTTP_STATUS_CODES.BAD_REQUEST,
|
|
83
|
+
undefined,
|
|
84
|
+
undefined,
|
|
85
|
+
true
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (Buffer.byteLength(String(record[hash_attribute])) > hdbTerms.INSERT_MAX_CHARACTER_SIZE) {
|
|
90
|
+
log.error(record);
|
|
91
|
+
throw handleHDBError(
|
|
92
|
+
new Error(),
|
|
93
|
+
HDB_ERROR_MSGS.HASH_VAL_LENGTH_ERR,
|
|
94
|
+
HTTP_STATUS_CODES.BAD_REQUEST,
|
|
95
|
+
undefined,
|
|
96
|
+
undefined,
|
|
97
|
+
true
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
}
|