@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,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = returnObject;
|
|
4
|
+
|
|
5
|
+
const INSERT_ACTION = 'inserted';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* constructs return object for insert and update.
|
|
9
|
+
* @param action
|
|
10
|
+
* @param written_hashes
|
|
11
|
+
* @param object
|
|
12
|
+
* @param skipped
|
|
13
|
+
* @returns {{skipped_hashes: *, update_hashes: *, message: string}}
|
|
14
|
+
*/
|
|
15
|
+
function returnObject(action, written_hashes, object, skipped) {
|
|
16
|
+
let return_object = {
|
|
17
|
+
message: `${action} ${written_hashes.length} of ${object.records.length} records`,
|
|
18
|
+
skipped_hashes: skipped,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
if (action === INSERT_ACTION) {
|
|
22
|
+
return_object.inserted_hashes = written_hashes;
|
|
23
|
+
return return_object;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return_object.update_hashes = written_hashes;
|
|
27
|
+
return return_object;
|
|
28
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbUtils = require('../../../utility/common_utils.js');
|
|
4
|
+
const log = require('../../../utility/logging/harper_logger.js');
|
|
5
|
+
const { getDatabases } = require('../../../resources/databases.ts');
|
|
6
|
+
const { ClientError } = require('../../../utility/errors/hdbError.js');
|
|
7
|
+
|
|
8
|
+
module.exports = insertUpdateValidate;
|
|
9
|
+
|
|
10
|
+
//IMPORTANT - This code is the same code as the async validation() function in dataLayer/insert - make sure any changes
|
|
11
|
+
// below are also made there. This is to resolve a circular dependency.
|
|
12
|
+
/**
|
|
13
|
+
* Takes an insert/update object and validates attributes, also looks for dups and get a list of all attributes from the record set
|
|
14
|
+
* @param {Object} writeObject
|
|
15
|
+
* @returns {Promise<{tableSchema, hashes: any[], attributes: string[]}>}
|
|
16
|
+
*/
|
|
17
|
+
function insertUpdateValidate(writeObject) {
|
|
18
|
+
// Need to validate these outside of the validator as the getTableSchema call will fail with
|
|
19
|
+
// invalid values.
|
|
20
|
+
|
|
21
|
+
if (hdbUtils.isEmpty(writeObject)) {
|
|
22
|
+
throw new ClientError('invalid update parameters defined.');
|
|
23
|
+
}
|
|
24
|
+
if (hdbUtils.isEmptyOrZeroLength(writeObject.schema)) {
|
|
25
|
+
throw new ClientError('invalid schema specified.');
|
|
26
|
+
}
|
|
27
|
+
if (hdbUtils.isEmptyOrZeroLength(writeObject.table)) {
|
|
28
|
+
throw new ClientError('invalid table specified.');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (!Array.isArray(writeObject.records)) {
|
|
32
|
+
throw new ClientError('records must be an array');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let schemaTable = getDatabases()[writeObject.schema]?.[writeObject.table];
|
|
36
|
+
if (hdbUtils.isEmpty(schemaTable)) {
|
|
37
|
+
throw new ClientError(`could not retrieve schema:${writeObject.schema} and table ${writeObject.table}`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let hash_attribute = schemaTable.primaryKey;
|
|
41
|
+
let dups = new Set();
|
|
42
|
+
let attributes = {};
|
|
43
|
+
|
|
44
|
+
let isUpdate = false;
|
|
45
|
+
if (writeObject.operation === 'update') {
|
|
46
|
+
isUpdate = true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
writeObject.records.forEach((record) => {
|
|
50
|
+
if (isUpdate && hdbUtils.isEmptyOrZeroLength(record[hash_attribute])) {
|
|
51
|
+
log.error('a valid hash attribute must be provided with update record:', record);
|
|
52
|
+
throw new ClientError('a valid hash attribute must be provided with update record, check log for more info');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (
|
|
56
|
+
!hdbUtils.isEmptyOrZeroLength(record[hash_attribute]) &&
|
|
57
|
+
(record[hash_attribute] === 'null' || record[hash_attribute] === 'undefined')
|
|
58
|
+
) {
|
|
59
|
+
log.error(`a valid hash value must be provided with ${writeObject.operation} record:`, record);
|
|
60
|
+
throw new ClientError(
|
|
61
|
+
`Invalid hash value: '${record[hash_attribute]}' is not a valid hash attribute value, check log for more info`
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (
|
|
66
|
+
!hdbUtils.isEmpty(record[hash_attribute]) &&
|
|
67
|
+
record[hash_attribute] !== '' &&
|
|
68
|
+
dups.has(hdbUtils.autoCast(record[hash_attribute]))
|
|
69
|
+
) {
|
|
70
|
+
record.skip = true;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
dups.add(hdbUtils.autoCast(record[hash_attribute]));
|
|
74
|
+
|
|
75
|
+
for (let attr in record) {
|
|
76
|
+
attributes[attr] = 1;
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
//in case the hash_attribute was not on the object(s) for inserts where they want to auto-key we manually add the hash_attribute to attributes
|
|
81
|
+
attributes[hash_attribute] = 1;
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
schema_table: schemaTable,
|
|
85
|
+
hashes: Array.from(dups),
|
|
86
|
+
attributes: Object.keys(attributes),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { ResourceBridge } = require('./ResourceBridge.ts');
|
|
4
|
+
const envMngr = require('../../utility/environment/environmentManager.js');
|
|
5
|
+
envMngr.initSync();
|
|
6
|
+
|
|
7
|
+
let harperBridge;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
* @returns {LMDBBridge|undefined}
|
|
12
|
+
*/
|
|
13
|
+
function getBridge() {
|
|
14
|
+
if (harperBridge) {
|
|
15
|
+
return harperBridge;
|
|
16
|
+
}
|
|
17
|
+
harperBridge = new ResourceBridge();
|
|
18
|
+
return harperBridge;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
module.exports = getBridge();
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const log = require('../../../utility/logging/harper_logger.js');
|
|
4
|
+
const { handleHDBError } = require('../../../utility/errors/hdbError.js');
|
|
5
|
+
const BridgeMethods = require('../BridgeMethods.js');
|
|
6
|
+
const lmdbCreateAttribute = require('./lmdbMethods/lmdbCreateAttribute.js');
|
|
7
|
+
const lmdbCreateRecords = require('./lmdbMethods/lmdbCreateRecords.js');
|
|
8
|
+
const lmdbCreateSchema = require('./lmdbMethods/lmdbCreateSchema.js');
|
|
9
|
+
const lmdbDeleteRecords = require('./lmdbMethods/lmdbDeleteRecords.js');
|
|
10
|
+
const lmdbGetDataByHash = require('./lmdbMethods/lmdbGetDataByHash.js');
|
|
11
|
+
const lmdbSearchByHash = require('./lmdbMethods/lmdbSearchByHash.js');
|
|
12
|
+
const lmdbGetDataByValue = require('./lmdbMethods/lmdbGetDataByValue.js');
|
|
13
|
+
const lmdbSearchByValue = require('./lmdbMethods/lmdbSearchByValue.js');
|
|
14
|
+
const lmdbSearchByConditions = require('./lmdbMethods/lmdbSearchByConditions.js');
|
|
15
|
+
const lmdbDropSchema = require('./lmdbMethods/lmdbDropSchema.js');
|
|
16
|
+
const lmdbCreateTable = require('./lmdbMethods/lmdbCreateTable.js');
|
|
17
|
+
const lmdbUpdateRecords = require('./lmdbMethods/lmdbUpdateRecords.js');
|
|
18
|
+
const lmdbUpsertRecords = require('./lmdbMethods/lmdbUpsertRecords.js');
|
|
19
|
+
const lmdbDeleteAuditLogsBefore = require('./lmdbMethods/lmdbDeleteAuditLogsBefore.js');
|
|
20
|
+
const lmdbDropTable = require('./lmdbMethods/lmdbDropTable.js');
|
|
21
|
+
const lmdbDropAttribute = require('./lmdbMethods/lmdbDropAttribute.js');
|
|
22
|
+
const lmdbReadAuditLog = require('./lmdbMethods/lmdbReadAuditLog.js');
|
|
23
|
+
const lmdbTransaction = require('./lmdbMethods/lmdbTransaction.js');
|
|
24
|
+
const lmdbFlush = require('./lmdbMethods/lmdbFlush.js');
|
|
25
|
+
const lmdbGetBackup = require('./lmdbMethods/lmdbGetBackup.js');
|
|
26
|
+
|
|
27
|
+
class LMDBBridge extends BridgeMethods {
|
|
28
|
+
async searchByConditions(searchObject) {
|
|
29
|
+
return lmdbSearchByConditions(searchObject);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async getDataByHash(searchObject) {
|
|
33
|
+
return await lmdbGetDataByHash(searchObject);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async searchByHash(searchObject) {
|
|
37
|
+
return await lmdbSearchByHash(searchObject);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async getDataByValue(searchObject, comparator) {
|
|
41
|
+
return await lmdbGetDataByValue(searchObject, comparator);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async searchByValue(searchObject) {
|
|
45
|
+
return await lmdbSearchByValue(searchObject);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async createSchema(schemaCreateObj) {
|
|
49
|
+
return await lmdbCreateSchema(schemaCreateObj);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async dropSchema(dropSchemaObj) {
|
|
53
|
+
return await lmdbDropSchema(dropSchemaObj);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async createTable(table, tableCreateObj) {
|
|
57
|
+
return await lmdbCreateTable(table, tableCreateObj);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async dropTable(dropTableObj) {
|
|
61
|
+
return await lmdbDropTable(dropTableObj);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async createAttribute(createAttributeObj) {
|
|
65
|
+
return await lmdbCreateAttribute(createAttributeObj);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async createRecords(insertObj) {
|
|
69
|
+
return await lmdbCreateRecords(insertObj);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async updateRecords(updateObj) {
|
|
73
|
+
return await lmdbUpdateRecords(updateObj);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async upsertRecords(upsertObj) {
|
|
77
|
+
try {
|
|
78
|
+
return await lmdbUpsertRecords(upsertObj);
|
|
79
|
+
} catch (err) {
|
|
80
|
+
//NOTE: this method call will either return the HdbError generated below this OR create a new HdbError w/ the
|
|
81
|
+
// default system error msg and 500 code AND log the error caught here (the error log will only happen if the
|
|
82
|
+
// error has not already been handled (i.e. translated and passed as a HdbError)
|
|
83
|
+
throw handleHDBError(err, null, null, log.ERR, err);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async deleteRecords(deleteObj) {
|
|
88
|
+
return await lmdbDeleteRecords(deleteObj);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async dropAttribute(dropAttrObj) {
|
|
92
|
+
return await lmdbDropAttribute(dropAttrObj);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
async deleteAuditLogsBefore(deleteObj) {
|
|
96
|
+
return await lmdbDeleteAuditLogsBefore(deleteObj);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async readAuditLog(readAuditLogObj) {
|
|
100
|
+
return await lmdbReadAuditLog(readAuditLogObj);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
writeTransaction(schema, table, callback) {
|
|
104
|
+
return lmdbTransaction.writeTransaction(schema, table, callback);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
flush(schema, table) {
|
|
108
|
+
return lmdbFlush.flush(schema, table);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
resetReadTxn(schema, table) {
|
|
112
|
+
return lmdbFlush.resetReadTxn(schema, table);
|
|
113
|
+
}
|
|
114
|
+
getBackup(getBackupObj) {
|
|
115
|
+
return lmdbGetBackup(getBackupObj);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
module.exports = LMDBBridge;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* represents the response object from Delete audit logs Before
|
|
5
|
+
*/
|
|
6
|
+
class DeleteAuditLogsBeforeResults {
|
|
7
|
+
/**
|
|
8
|
+
* @param {number} startTimestamp
|
|
9
|
+
* @param {number} endTimestamp
|
|
10
|
+
* @param {number} transactionsDeleted
|
|
11
|
+
*/
|
|
12
|
+
constructor(startTimestamp = undefined, endTimestamp = undefined, transactionsDeleted = 0) {
|
|
13
|
+
this.start_timestamp = startTimestamp;
|
|
14
|
+
this.end_timestamp = endTimestamp;
|
|
15
|
+
this.transactions_deleted = transactionsDeleted;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
module.exports = DeleteAuditLogsBeforeResults;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
4
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
5
|
+
const writeUtility = require('../../../../utility/lmdb/writeUtility.js');
|
|
6
|
+
const { getSystemSchemaPath, getSchemaPath } = require('../lmdbUtility/initializePaths.js');
|
|
7
|
+
const { validateBySchema } = require('../../../../validation/validationWrapper.js');
|
|
8
|
+
const Joi = require('joi');
|
|
9
|
+
const LMDBCreateAttributeObject = require('../lmdbUtility/LMDBCreateAttributeObject.js');
|
|
10
|
+
const returnObject = require('../../bridgeUtility/insertUpdateReturnObj.js');
|
|
11
|
+
const { handleHDBError, hdbErrors, ClientError } = require('../../../../utility/errors/hdbError.js');
|
|
12
|
+
const hdbUtils = require('../../../../utility/common_utils.js');
|
|
13
|
+
const { HTTP_STATUS_CODES } = hdbErrors;
|
|
14
|
+
|
|
15
|
+
const ACTION = 'inserted';
|
|
16
|
+
|
|
17
|
+
module.exports = lmdbCreateAttribute;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* First adds the attribute to the system attribute table, then creates the dbi.
|
|
21
|
+
* @param {LMDBCreateAttributeObject} createAttributeObj
|
|
22
|
+
* @returns {{skipped_hashes: *, update_hashes: *, message: string}}
|
|
23
|
+
*/
|
|
24
|
+
async function lmdbCreateAttribute(createAttributeObj) {
|
|
25
|
+
const validation = validateBySchema(
|
|
26
|
+
createAttributeObj,
|
|
27
|
+
Joi.object({
|
|
28
|
+
database: Joi.string(),
|
|
29
|
+
schema: Joi.string(),
|
|
30
|
+
table: Joi.string().required(),
|
|
31
|
+
attribute: Joi.string().required(),
|
|
32
|
+
})
|
|
33
|
+
);
|
|
34
|
+
if (validation) throw new ClientError(validation.message);
|
|
35
|
+
|
|
36
|
+
//check if schema.table does not exist throw error
|
|
37
|
+
let checkSchemaTable =
|
|
38
|
+
!createAttributeObj.skip_table_check &&
|
|
39
|
+
hdbUtils.checkGlobalSchemaTable(createAttributeObj.schema, createAttributeObj.table);
|
|
40
|
+
if (checkSchemaTable) {
|
|
41
|
+
throw handleHDBError(new Error(), checkSchemaTable, HTTP_STATUS_CODES.NOT_FOUND);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
//the validator strings everything so we need to recast the booleans on createAttributeObj
|
|
45
|
+
createAttributeObj.isPrimaryKey = createAttributeObj.isPrimaryKey == 'true';
|
|
46
|
+
createAttributeObj.dup_sort = hdbUtils.isEmpty(createAttributeObj.dup_sort) || createAttributeObj.dup_sort == 'true';
|
|
47
|
+
|
|
48
|
+
let attributesObjArray = [];
|
|
49
|
+
//on initial creation of a table it will not exist in hdbSchema yet
|
|
50
|
+
if (
|
|
51
|
+
global.hdb_schema[createAttributeObj.schema] &&
|
|
52
|
+
global.hdb_schema[createAttributeObj.schema][createAttributeObj.table]
|
|
53
|
+
) {
|
|
54
|
+
attributesObjArray = global.hdb_schema[createAttributeObj.schema][createAttributeObj.table]['attributes'];
|
|
55
|
+
}
|
|
56
|
+
if (Array.isArray(attributesObjArray) && attributesObjArray.length > 0) {
|
|
57
|
+
for (let attribute of attributesObjArray) {
|
|
58
|
+
if (attribute.attribute === createAttributeObj.attribute) {
|
|
59
|
+
throw new Error(
|
|
60
|
+
`attribute '${attribute.attribute}' already exists in ${createAttributeObj.schema}.${createAttributeObj.table}`
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
//insert the attribute metaData into system.hdb_attribute
|
|
67
|
+
let record = new LMDBCreateAttributeObject(
|
|
68
|
+
createAttributeObj.schema,
|
|
69
|
+
createAttributeObj.table,
|
|
70
|
+
createAttributeObj.attribute,
|
|
71
|
+
createAttributeObj.id
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
//create dbi into the environment for this table
|
|
76
|
+
let env = await environmentUtility.openEnvironment(
|
|
77
|
+
getSchemaPath(createAttributeObj.schema, createAttributeObj.table),
|
|
78
|
+
createAttributeObj.table
|
|
79
|
+
);
|
|
80
|
+
if (env.dbis[createAttributeObj.attribute] !== undefined) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
`attribute '${createAttributeObj.attribute}' already exists in ${createAttributeObj.schema}.${createAttributeObj.table}`
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
environmentUtility.createDBI(
|
|
86
|
+
env,
|
|
87
|
+
createAttributeObj.attribute,
|
|
88
|
+
createAttributeObj.dup_sort,
|
|
89
|
+
createAttributeObj.isPrimaryKey
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
let hdbAttributeEnv = await environmentUtility.openEnvironment(
|
|
93
|
+
getSystemSchemaPath(),
|
|
94
|
+
hdbTerms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
let { written_hashes, skipped_hashes } = await writeUtility.insertRecords(
|
|
98
|
+
hdbAttributeEnv,
|
|
99
|
+
// I'm not sure what else to do with these for now, but I do want to eslint to check the rest of the codebase
|
|
100
|
+
// for undefined vars. - WSM 2025-11-26
|
|
101
|
+
// eslint-disable-next-line no-undef
|
|
102
|
+
HDB_TABLE_INFO.hash_attribute,
|
|
103
|
+
// eslint-disable-next-line no-undef
|
|
104
|
+
hdbAttributeAttributes,
|
|
105
|
+
[record]
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
return returnObject(ACTION, written_hashes, { records: [record] }, skipped_hashes);
|
|
109
|
+
} catch (e) {
|
|
110
|
+
throw e;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const insertUpdateValidate = require('../../bridgeUtility/insertUpdateValidate.js');
|
|
4
|
+
// eslint-disable-next-line no-unused-vars
|
|
5
|
+
const InsertObject = require('../../../InsertObject.js');
|
|
6
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
7
|
+
const lmdbProcessRows = require('../lmdbUtility/lmdbProcessRows.js');
|
|
8
|
+
const lmdbInsertRecords = require('../../../../utility/lmdb/writeUtility.js').insertRecords;
|
|
9
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
10
|
+
const logger = require('../../../../utility/logging/harper_logger.js');
|
|
11
|
+
|
|
12
|
+
const lmdbCheckNewAttributes = require('../lmdbUtility/lmdbCheckForNewAttributes.js');
|
|
13
|
+
const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
|
|
14
|
+
const writeTransaction = require('../lmdbUtility/lmdbWriteTransaction.js');
|
|
15
|
+
|
|
16
|
+
module.exports = lmdbCreateRecords;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Orchestrates the insertion of data into LMDB and the creation of new attributes/dbis
|
|
20
|
+
* if they do not already exist.
|
|
21
|
+
* @param {InsertObject} insertObj
|
|
22
|
+
* @returns {Promise<{skipped_hashes: *, written_hashes: *, schema_table: *}>}
|
|
23
|
+
*/
|
|
24
|
+
async function lmdbCreateRecords(insertObj) {
|
|
25
|
+
try {
|
|
26
|
+
let { schemaTable, attributes } = insertUpdateValidate(insertObj);
|
|
27
|
+
|
|
28
|
+
lmdbProcessRows(insertObj, attributes, schemaTable.hash_attribute);
|
|
29
|
+
|
|
30
|
+
if (insertObj.schema !== hdbTerms.SYSTEM_SCHEMA_NAME) {
|
|
31
|
+
if (!attributes.includes(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME)) {
|
|
32
|
+
attributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!attributes.includes(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)) {
|
|
36
|
+
attributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let new_attributes = await lmdbCheckNewAttributes(insertObj.hdb_auth_header, schemaTable, attributes);
|
|
41
|
+
let envBasePath = getSchemaPath(insertObj.schema, insertObj.table);
|
|
42
|
+
let environment = await environmentUtility.openEnvironment(envBasePath, insertObj.table);
|
|
43
|
+
let lmdbResponse = await lmdbInsertRecords(
|
|
44
|
+
environment,
|
|
45
|
+
schemaTable.hash_attribute,
|
|
46
|
+
attributes,
|
|
47
|
+
insertObj.records,
|
|
48
|
+
insertObj.__origin?.timestamp
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
await writeTransaction(insertObj, lmdbResponse);
|
|
53
|
+
} catch (e) {
|
|
54
|
+
logger.error(`unable to write transaction due to ${e.message}`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
written_hashes: lmdbResponse.written_hashes,
|
|
59
|
+
skipped_hashes: lmdbResponse.skipped_hashes,
|
|
60
|
+
schemaTable,
|
|
61
|
+
new_attributes,
|
|
62
|
+
txn_time: lmdbResponse.txn_time,
|
|
63
|
+
};
|
|
64
|
+
} catch (err) {
|
|
65
|
+
throw err;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
4
|
+
const lmdbCreateRecords = require('./lmdbCreateRecords.js');
|
|
5
|
+
const InsertObject = require('../../../InsertObject.js');
|
|
6
|
+
const fs = require('fs-extra');
|
|
7
|
+
const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
|
|
8
|
+
|
|
9
|
+
module.exports = lmdbCreateSchema;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* creates the meta data for the schema
|
|
13
|
+
* @param createSchemaObj
|
|
14
|
+
*/
|
|
15
|
+
async function lmdbCreateSchema(createSchemaObj) {
|
|
16
|
+
let records = [
|
|
17
|
+
{
|
|
18
|
+
name: createSchemaObj.schema,
|
|
19
|
+
createddate: Date.now(),
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
let insertObject = new InsertObject(
|
|
23
|
+
hdbTerms.SYSTEM_SCHEMA_NAME,
|
|
24
|
+
hdbTerms.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,
|
|
25
|
+
undefined,
|
|
26
|
+
records
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
await lmdbCreateRecords(insertObject);
|
|
30
|
+
await fs.mkdirp(getSchemaPath(createSchemaObj.schema));
|
|
31
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbTerms = require('../../../../utility/hdbTerms.ts');
|
|
4
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
5
|
+
const writeUtility = require('../../../../utility/lmdb/writeUtility.js');
|
|
6
|
+
const { getSystemSchemaPath, getSchemaPath } = require('../lmdbUtility/initializePaths.js');
|
|
7
|
+
const lmdbCreateAttribute = require('./lmdbCreateAttribute.js');
|
|
8
|
+
const LMDBCreateAttributeObject = require('../lmdbUtility/LMDBCreateAttributeObject.js');
|
|
9
|
+
const log = require('../../../../utility/logging/harper_logger.js');
|
|
10
|
+
const createTxnEnvironments = require('../lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js');
|
|
11
|
+
|
|
12
|
+
module.exports = lmdbCreateTable;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Writes new table data to the system tables creates the environment file and creates two datastores to track created and updated
|
|
16
|
+
* timestamps for new table data.
|
|
17
|
+
* @param tableSystemData
|
|
18
|
+
* @param tableCreateObj
|
|
19
|
+
*/
|
|
20
|
+
async function lmdbCreateTable(tableSystemData, tableCreateObj) {
|
|
21
|
+
let schemaPath = getSchemaPath(tableCreateObj.schema, tableCreateObj.table);
|
|
22
|
+
|
|
23
|
+
let createdTimeAttr = new LMDBCreateAttributeObject(
|
|
24
|
+
tableCreateObj.schema,
|
|
25
|
+
tableCreateObj.table,
|
|
26
|
+
hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME,
|
|
27
|
+
undefined,
|
|
28
|
+
true
|
|
29
|
+
);
|
|
30
|
+
let updatedTimeAttr = new LMDBCreateAttributeObject(
|
|
31
|
+
tableCreateObj.schema,
|
|
32
|
+
tableCreateObj.table,
|
|
33
|
+
hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,
|
|
34
|
+
undefined,
|
|
35
|
+
true
|
|
36
|
+
);
|
|
37
|
+
let hashAttr = new LMDBCreateAttributeObject(
|
|
38
|
+
tableCreateObj.schema,
|
|
39
|
+
tableCreateObj.table,
|
|
40
|
+
tableCreateObj.hash_attribute,
|
|
41
|
+
undefined,
|
|
42
|
+
false,
|
|
43
|
+
true
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
//create the new environment
|
|
48
|
+
await environmentUtility.createEnvironment(schemaPath, tableCreateObj.table);
|
|
49
|
+
|
|
50
|
+
if (tableSystemData !== undefined) {
|
|
51
|
+
let hdbTableEnv = await environmentUtility.openEnvironment(
|
|
52
|
+
getSystemSchemaPath(),
|
|
53
|
+
hdbTerms.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
//add the meta data to system.hdb_table
|
|
57
|
+
await writeUtility.insertRecords(
|
|
58
|
+
hdbTableEnv,
|
|
59
|
+
// I'm not sure what else to do with these for now, but I do want to eslint to check the rest of the codebase
|
|
60
|
+
// for undefined vars. - WSM 2025-11-26
|
|
61
|
+
// eslint-disable-next-line no-undef
|
|
62
|
+
HDB_TABLE_INFO.hash_attribute,
|
|
63
|
+
// eslint-disable-next-line no-undef
|
|
64
|
+
hdbTableAttributes,
|
|
65
|
+
[tableSystemData]
|
|
66
|
+
);
|
|
67
|
+
//create attributes for hash attribute created/updated time stamps
|
|
68
|
+
createdTimeAttr.skip_table_check = true;
|
|
69
|
+
updatedTimeAttr.skip_table_check = true;
|
|
70
|
+
hashAttr.skip_table_check = true;
|
|
71
|
+
|
|
72
|
+
await createAttribute(createdTimeAttr);
|
|
73
|
+
await createAttribute(updatedTimeAttr);
|
|
74
|
+
await createAttribute(hashAttr);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
await createTxnEnvironments(tableCreateObj);
|
|
78
|
+
} catch (e) {
|
|
79
|
+
throw e;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* used to individually create the required attributes for a new table, logs a warning if any fail
|
|
85
|
+
* @param {LMDBCreateAttributeObject} attributeObject
|
|
86
|
+
* @returns {Promise<void>}
|
|
87
|
+
*/
|
|
88
|
+
async function createAttribute(attributeObject) {
|
|
89
|
+
try {
|
|
90
|
+
await lmdbCreateAttribute(attributeObject);
|
|
91
|
+
} catch (e) {
|
|
92
|
+
log.warn(`failed to create attribute ${attributeObject.attribute} due to ${e.message}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
|
|
4
|
+
const { getTransactionAuditStorePath } = require('../lmdbUtility/initializePaths.js');
|
|
5
|
+
// eslint-disable-next-line no-unused-vars
|
|
6
|
+
const DeleteBeforeObject = require('../../../DeleteBeforeObject.js');
|
|
7
|
+
const lmdbTerms = require('../../../../utility/lmdb/terms.js');
|
|
8
|
+
const hdbUtils = require('../../../../utility/common_utils.js');
|
|
9
|
+
const DeleteAuditLogsBeforeResults = require('./DeleteAuditLogsBeforeResults.js');
|
|
10
|
+
const promisify = require('util').promisify;
|
|
11
|
+
const pSettimeout = promisify(setTimeout);
|
|
12
|
+
|
|
13
|
+
const BATCH_SIZE = 10000;
|
|
14
|
+
const SLEEP_TIME_MS = 100;
|
|
15
|
+
|
|
16
|
+
module.exports = deleteAuditLogsBefore;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @param {DeleteBeforeObject} deleteAuditLogsObj
|
|
21
|
+
*/
|
|
22
|
+
async function deleteAuditLogsBefore(deleteAuditLogsObj) {
|
|
23
|
+
let schemaPath = getTransactionAuditStorePath(deleteAuditLogsObj.schema, deleteAuditLogsObj.table);
|
|
24
|
+
let env = await environmentUtility.openEnvironment(schemaPath, deleteAuditLogsObj.table, true);
|
|
25
|
+
let allDbis = environmentUtility.listDBIs(env);
|
|
26
|
+
environmentUtility.initializeDBIs(env, lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP, allDbis);
|
|
27
|
+
|
|
28
|
+
let chunkResults;
|
|
29
|
+
let totalResults = new DeleteAuditLogsBeforeResults();
|
|
30
|
+
|
|
31
|
+
do {
|
|
32
|
+
chunkResults = await deleteTransactions(env, deleteAuditLogsObj.timestamp);
|
|
33
|
+
if (totalResults.start_timestamp === undefined) {
|
|
34
|
+
totalResults.start_timestamp = chunkResults.start_timestamp;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (chunkResults.end_timestamp !== undefined) {
|
|
38
|
+
totalResults.end_timestamp = chunkResults.end_timestamp;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
totalResults.transactions_deleted += chunkResults.transactions_deleted;
|
|
42
|
+
|
|
43
|
+
//we do a pause on delete so it opens access to the txn environment for other processes.
|
|
44
|
+
await pSettimeout(SLEEP_TIME_MS);
|
|
45
|
+
} while (chunkResults.transactions_deleted > 0);
|
|
46
|
+
|
|
47
|
+
return totalResults;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
*
|
|
52
|
+
* @param env
|
|
53
|
+
* @param {number} timestamp
|
|
54
|
+
* @returns {Promise<DeleteAuditLogsBeforeResults>}
|
|
55
|
+
*/
|
|
56
|
+
async function deleteTransactions(env, timestamp) {
|
|
57
|
+
let results = new DeleteAuditLogsBeforeResults();
|
|
58
|
+
try {
|
|
59
|
+
let timestampDbi = env.dbis[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];
|
|
60
|
+
|
|
61
|
+
let promise;
|
|
62
|
+
for (let { key, value: txnRecord } of timestampDbi.getRange({ start: false })) {
|
|
63
|
+
if (key >= timestamp) {
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (results.start_timestamp === undefined) {
|
|
68
|
+
results.start_timestamp = key;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
//delete the transaction record
|
|
72
|
+
promise = timestampDbi.remove(key);
|
|
73
|
+
|
|
74
|
+
//delete user index entry
|
|
75
|
+
let userName = txnRecord[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];
|
|
76
|
+
if (!hdbUtils.isEmpty(userName)) {
|
|
77
|
+
promise = env.dbis[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(userName, key);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
//delete each hash value entry
|
|
81
|
+
for (let k = 0; k < txnRecord.hash_values.length; k++) {
|
|
82
|
+
promise = env.dbis[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(txnRecord.hash_values[k], key);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
results.transactions_deleted++;
|
|
86
|
+
results.end_timestamp = key;
|
|
87
|
+
if (results.transactions_deleted > BATCH_SIZE) {
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// we wait for the last promise to finish
|
|
92
|
+
await promise;
|
|
93
|
+
|
|
94
|
+
return results;
|
|
95
|
+
} catch (e) {
|
|
96
|
+
throw e;
|
|
97
|
+
}
|
|
98
|
+
}
|