@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/BinObjects.js +17 -0
- package/bin/cliOperations.js +157 -0
- package/bin/copyDb.ts +280 -0
- package/bin/harper.js +156 -0
- package/bin/install.js +15 -0
- package/bin/lite.js +5 -0
- package/bin/restart.js +201 -0
- package/bin/run.js +409 -0
- package/bin/status.js +65 -0
- package/bin/stop.js +22 -0
- package/bin/upgrade.js +134 -0
- package/components/Application.ts +646 -0
- package/components/ApplicationScope.ts +49 -0
- package/components/Component.ts +53 -0
- package/components/ComponentV1.ts +342 -0
- package/components/DEFAULT_CONFIG.ts +18 -0
- package/components/EntryHandler.ts +227 -0
- package/components/Logger.ts +14 -0
- package/components/OptionsWatcher.ts +354 -0
- package/components/PluginModule.ts +6 -0
- package/components/Scope.ts +329 -0
- package/components/componentLoader.ts +529 -0
- package/components/deriveCommonPatternBase.ts +31 -0
- package/components/deriveGlobOptions.ts +44 -0
- package/components/deriveURLPath.ts +57 -0
- package/components/operations.js +658 -0
- package/components/operationsValidation.js +246 -0
- package/components/packageComponent.ts +39 -0
- package/components/requestRestart.ts +26 -0
- package/components/resolveBaseURLPath.ts +38 -0
- package/components/status/ComponentStatus.ts +110 -0
- package/components/status/ComponentStatusRegistry.ts +251 -0
- package/components/status/api.ts +153 -0
- package/components/status/crossThread.ts +405 -0
- package/components/status/errors.ts +152 -0
- package/components/status/index.ts +44 -0
- package/components/status/internal.ts +65 -0
- package/components/status/registry.ts +12 -0
- package/components/status/types.ts +96 -0
- package/config/RootConfigWatcher.ts +59 -0
- package/config/configHelpers.ts +11 -0
- package/config/configUtils.js +967 -0
- package/config/harperConfigEnvVars.ts +641 -0
- package/dataLayer/CreateAttributeObject.js +25 -0
- package/dataLayer/CreateTableObject.js +11 -0
- package/dataLayer/DataLayerObjects.js +43 -0
- package/dataLayer/DeleteBeforeObject.js +22 -0
- package/dataLayer/DeleteObject.js +25 -0
- package/dataLayer/DropAttributeObject.js +11 -0
- package/dataLayer/GetBackupObject.js +22 -0
- package/dataLayer/InsertObject.js +24 -0
- package/dataLayer/ReadAuditLogObject.js +24 -0
- package/dataLayer/SQLSearch.js +1335 -0
- package/dataLayer/SearchByConditionsObject.js +61 -0
- package/dataLayer/SearchByHashObject.js +21 -0
- package/dataLayer/SearchObject.js +45 -0
- package/dataLayer/SqlSearchObject.js +14 -0
- package/dataLayer/UpdateObject.js +23 -0
- package/dataLayer/UpsertObject.js +23 -0
- package/dataLayer/bulkLoad.js +813 -0
- package/dataLayer/dataObjects/BulkLoadObjects.js +27 -0
- package/dataLayer/dataObjects/UpsertObject.js +23 -0
- package/dataLayer/delete.js +164 -0
- package/dataLayer/export.js +381 -0
- package/dataLayer/getBackup.js +40 -0
- package/dataLayer/harperBridge/BridgeMethods.js +81 -0
- package/dataLayer/harperBridge/ResourceBridge.ts +633 -0
- package/dataLayer/harperBridge/bridgeUtility/insertUpdateReturnObj.js +28 -0
- package/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +88 -0
- package/dataLayer/harperBridge/harperBridge.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/LMDBBridge.js +119 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +19 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +112 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +67 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +31 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +94 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +98 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +89 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +109 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +107 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +137 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +35 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +111 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +28 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +29 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +207 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +156 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +30 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbTransaction.js +19 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +64 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +70 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +22 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBDeleteTransactionObject.js +23 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBInsertTransactionObject.js +22 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBTransactionObject.js +23 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpdateTransactionObject.js +24 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpsertTransactionObject.js +24 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +25 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +157 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +94 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +39 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +34 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +100 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +371 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +109 -0
- package/dataLayer/hdbInfoController.js +254 -0
- package/dataLayer/insert.js +266 -0
- package/dataLayer/readAuditLog.js +59 -0
- package/dataLayer/schema.js +366 -0
- package/dataLayer/schemaDescribe.js +289 -0
- package/dataLayer/search.js +60 -0
- package/dataLayer/transaction.js +17 -0
- package/dataLayer/update.js +124 -0
- package/dist/components/Logger.d.ts +12 -0
- package/dist/{resources/ResourceInterfaceV2.js → components/Logger.js} +1 -1
- package/dist/components/Logger.js.map +1 -0
- package/dist/components/Scope.d.ts +14 -4
- package/dist/components/Scope.js +18 -10
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/componentLoader.js +17 -10
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/operations.js +2 -2
- package/dist/components/operations.js.map +1 -1
- package/dist/config/configUtils.d.ts +1 -1
- package/dist/config/configUtils.js +1 -1
- package/dist/config/configUtils.js.map +1 -1
- package/dist/dataLayer/CreateTableObject.d.ts +2 -2
- package/dist/dataLayer/CreateTableObject.js +2 -2
- package/dist/dataLayer/CreateTableObject.js.map +1 -1
- package/dist/dataLayer/delete.d.ts +1 -1
- package/dist/dataLayer/schema.js +6 -5
- package/dist/dataLayer/schema.js.map +1 -1
- package/dist/dataLayer/schemaDescribe.js +1 -1
- package/dist/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/resources/DatabaseTransaction.d.ts +1 -1
- package/dist/resources/IterableEventQueue.d.ts +1 -1
- package/dist/resources/LMDBTransaction.d.ts +5 -1
- package/dist/resources/Resource.d.ts +1 -1
- package/dist/resources/ResourceInterface.d.ts +1 -1
- package/dist/resources/RocksIndexStore.d.ts +3 -3
- package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
- package/dist/resources/Table.d.ts +15 -6
- package/dist/resources/Table.js +12 -4
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/read.js +32 -22
- package/dist/resources/analytics/read.js.map +1 -1
- package/dist/resources/analytics/write.js +3 -6
- package/dist/resources/analytics/write.js.map +1 -1
- package/dist/resources/auditStore.d.ts +3 -3
- package/dist/resources/blob.d.ts +25 -2
- package/dist/resources/databases.d.ts +12 -2
- package/dist/resources/databases.js +22 -19
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/search.js +11 -5
- package/dist/resources/search.js.map +1 -1
- package/dist/resources/transaction.d.ts +2 -1
- package/dist/security/auth.js +1 -1
- package/dist/security/auth.js.map +1 -1
- package/dist/security/cryptoHash.d.ts +2 -2
- package/dist/security/jsLoader.js +265 -73
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/security/keys.js +11 -12
- package/dist/security/keys.js.map +1 -1
- package/dist/security/user.js +3 -3
- package/dist/security/user.js.map +1 -1
- package/dist/server/REST.js +16 -2
- package/dist/server/REST.js.map +1 -1
- package/dist/server/Server.d.ts +2 -1
- package/dist/server/Server.js.map +1 -1
- package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
- package/dist/server/fastifyRoutes.js +2 -0
- package/dist/server/fastifyRoutes.js.map +1 -1
- package/dist/server/http.js +12 -6
- package/dist/server/http.js.map +1 -1
- package/dist/server/jobs/JobObject.d.ts +3 -3
- package/dist/server/loadRootComponents.js +1 -0
- package/dist/server/loadRootComponents.js.map +1 -1
- package/dist/server/operationsServer.js +3 -1
- package/dist/server/operationsServer.js.map +1 -1
- package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
- package/dist/server/serverHelpers/Request.d.ts +5 -5
- package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
- package/dist/server/threads/manageThreads.d.ts +2 -2
- package/dist/server/threads/manageThreads.js +52 -35
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/server/threads/socketRouter.d.ts +1 -1
- package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
- package/dist/utility/AWS/AWSConnector.d.ts +3 -2
- package/dist/utility/common_utils.d.ts +3 -3
- package/dist/utility/environment/systemInformation.d.ts +1 -0
- package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
- package/dist/utility/globalSchema.d.ts +1 -1
- package/dist/utility/hdbTerms.d.ts +3 -0
- package/dist/utility/hdbTerms.js +3 -0
- package/dist/utility/hdbTerms.js.map +1 -1
- package/dist/utility/installation.d.ts +2 -4
- package/dist/utility/installation.js.map +1 -1
- package/dist/utility/lmdb/commonUtility.d.ts +2 -1
- package/dist/utility/lmdb/commonUtility.js +20 -13
- package/dist/utility/lmdb/commonUtility.js.map +1 -1
- package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
- package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
- package/dist/utility/lmdb/searchUtility.d.ts +2 -1
- package/dist/utility/lmdb/writeUtility.d.ts +1 -0
- package/dist/utility/logging/harper_logger.d.ts +6 -6
- package/dist/utility/processManagement/processManagement.d.ts +1 -1
- package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
- package/dist/validation/common_validators.d.ts +4 -3
- package/dist/validation/configValidator.d.ts +3 -2
- package/index.d.ts +56 -0
- package/index.js +41 -0
- package/json/systemSchema.json +373 -0
- package/launchServiceScripts/launchHarperDB.js +3 -0
- package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
- package/package.json +35 -16
- package/resources/DatabaseTransaction.ts +378 -0
- package/resources/ErrorResource.ts +57 -0
- package/resources/IterableEventQueue.ts +94 -0
- package/resources/LMDBTransaction.ts +349 -0
- package/resources/RecordEncoder.ts +702 -0
- package/resources/RequestTarget.ts +134 -0
- package/resources/Resource.ts +789 -0
- package/resources/ResourceInterface.ts +221 -0
- package/resources/Resources.ts +162 -0
- package/resources/RocksIndexStore.ts +70 -0
- package/resources/RocksTransactionLogStore.ts +352 -0
- package/resources/Table.ts +4531 -0
- package/resources/analytics/hostnames.ts +72 -0
- package/resources/analytics/metadata.ts +10 -0
- package/resources/analytics/read.ts +252 -0
- package/resources/analytics/write.ts +803 -0
- package/resources/auditStore.ts +556 -0
- package/resources/blob.ts +1268 -0
- package/resources/crdt.ts +125 -0
- package/resources/dataLoader.ts +527 -0
- package/resources/databases.ts +1290 -0
- package/resources/graphql.ts +221 -0
- package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
- package/resources/indexes/customIndexes.ts +7 -0
- package/resources/indexes/vector.ts +38 -0
- package/resources/jsResource.ts +86 -0
- package/resources/loadEnv.ts +22 -0
- package/resources/login.ts +18 -0
- package/resources/openApi.ts +409 -0
- package/resources/registrationDeprecated.ts +8 -0
- package/resources/replayLogs.ts +136 -0
- package/resources/roles.ts +98 -0
- package/resources/search.ts +1301 -0
- package/resources/tracked.ts +584 -0
- package/resources/transaction.ts +89 -0
- package/resources/transactionBroadcast.ts +258 -0
- package/security/auth.ts +376 -0
- package/security/certificateVerification/certificateVerificationSource.ts +84 -0
- package/security/certificateVerification/configValidation.ts +107 -0
- package/security/certificateVerification/crlVerification.ts +623 -0
- package/security/certificateVerification/index.ts +121 -0
- package/security/certificateVerification/ocspVerification.ts +148 -0
- package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
- package/security/certificateVerification/types.ts +128 -0
- package/security/certificateVerification/verificationConfig.ts +138 -0
- package/security/certificateVerification/verificationUtils.ts +447 -0
- package/security/cryptoHash.js +42 -0
- package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
- package/security/data_objects/PermissionResponseObject.js +115 -0
- package/security/data_objects/PermissionTableResponseObject.js +20 -0
- package/security/fastifyAuth.js +169 -0
- package/security/impersonation.ts +160 -0
- package/security/jsLoader.ts +733 -0
- package/security/keys.js +948 -0
- package/security/permissionsTranslator.js +300 -0
- package/security/role.js +218 -0
- package/security/tokenAuthentication.ts +228 -0
- package/security/user.ts +449 -0
- package/server/DurableSubscriptionsSession.ts +503 -0
- package/server/REST.ts +407 -0
- package/server/Server.ts +89 -0
- package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
- package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
- package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
- package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
- package/server/fastifyRoutes.ts +205 -0
- package/server/graphqlQuerying.ts +700 -0
- package/server/http.ts +640 -0
- package/server/itc/serverHandlers.js +161 -0
- package/server/itc/utility/ITCEventObject.js +10 -0
- package/server/jobs/JobObject.js +24 -0
- package/server/jobs/jobProcess.js +69 -0
- package/server/jobs/jobRunner.js +162 -0
- package/server/jobs/jobs.js +304 -0
- package/server/loadRootComponents.js +44 -0
- package/server/mqtt.ts +485 -0
- package/server/nodeName.ts +75 -0
- package/server/operationsServer.ts +313 -0
- package/server/serverHelpers/Headers.ts +108 -0
- package/server/serverHelpers/JSONStream.ts +269 -0
- package/server/serverHelpers/OperationFunctionObject.ts +13 -0
- package/server/serverHelpers/Request.ts +158 -0
- package/server/serverHelpers/contentTypes.ts +637 -0
- package/server/serverHelpers/requestTimePlugin.js +57 -0
- package/server/serverHelpers/serverHandlers.js +148 -0
- package/server/serverHelpers/serverUtilities.ts +473 -0
- package/server/serverRegistry.ts +8 -0
- package/server/static.ts +187 -0
- package/server/status/definitions.ts +37 -0
- package/server/status/index.ts +125 -0
- package/server/storageReclamation.ts +93 -0
- package/server/threads/itc.js +89 -0
- package/server/threads/manageThreads.js +596 -0
- package/server/threads/socketRouter.ts +360 -0
- package/server/threads/threadServer.js +279 -0
- package/server/throttle.ts +73 -0
- package/sqlTranslator/SelectValidator.js +330 -0
- package/sqlTranslator/alasqlFunctionImporter.js +62 -0
- package/sqlTranslator/deleteTranslator.js +67 -0
- package/sqlTranslator/index.js +242 -0
- package/sqlTranslator/sql_statement_bucket.js +472 -0
- package/static/defaultConfig.yaml +3 -0
- package/studio/web/HDBDogOnly.svg +78 -0
- package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
- package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
- package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
- package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
- package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
- package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
- package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
- package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
- package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
- package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
- package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
- package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
- package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
- package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
- package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
- package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
- package/studio/web/assets/index-C1G-Jo6n.js +37 -0
- package/studio/web/assets/index-C1G-Jo6n.js.map +1 -0
- package/studio/web/assets/index-D-CahN0-.js +2 -0
- package/studio/web/assets/index-D-CahN0-.js.map +1 -0
- package/studio/web/assets/index-DxlZI0PX.js +235 -0
- package/studio/web/assets/index-DxlZI0PX.js.map +1 -0
- package/studio/web/assets/index-Y2g_iFpU.css +1 -0
- package/studio/web/assets/index-jiPwkrsB.css +1 -0
- package/studio/web/assets/index.lazy-BUXDDqq9.js +266 -0
- package/studio/web/assets/index.lazy-BUXDDqq9.js.map +1 -0
- package/studio/web/assets/profiler-CU93QiSW.js +2 -0
- package/studio/web/assets/profiler-CU93QiSW.js.map +1 -0
- package/studio/web/assets/react-redux-B8k9Ep7e.js +6 -0
- package/studio/web/assets/react-redux-B8k9Ep7e.js.map +1 -0
- package/studio/web/assets/startRecording-DFeBXGk6.js +3 -0
- package/studio/web/assets/startRecording-DFeBXGk6.js.map +1 -0
- package/studio/web/fabric-signup-background.webp +0 -0
- package/studio/web/fabric-signup-text.png +0 -0
- package/studio/web/favicon_purple.png +0 -0
- package/studio/web/github-icon.svg +15 -0
- package/studio/web/harper-fabric_black.png +0 -0
- package/studio/web/harper-fabric_white.png +0 -0
- package/studio/web/harper-studio_white.png +0 -0
- package/studio/web/index.html +16 -0
- package/studio/web/running.css +148 -0
- package/studio/web/running.html +147 -0
- package/studio/web/running.js +111 -0
- package/upgrade/UpgradeObjects.js +13 -0
- package/upgrade/directives/directivesController.js +90 -0
- package/upgrade/directivesManager.js +139 -0
- package/upgrade/upgradePrompt.js +124 -0
- package/upgrade/upgradeUtilities.js +28 -0
- package/utility/AWS/AWSConnector.js +29 -0
- package/utility/OperationFunctionCaller.js +63 -0
- package/utility/assignCmdEnvVariables.js +62 -0
- package/utility/common_utils.js +867 -0
- package/utility/environment/environmentManager.js +208 -0
- package/utility/environment/systemInformation.js +355 -0
- package/utility/errors/commonErrors.js +267 -0
- package/utility/errors/hdbError.js +146 -0
- package/utility/functions/date/dateFunctions.js +65 -0
- package/utility/functions/geo.js +355 -0
- package/utility/functions/sql/alaSQLExtension.js +104 -0
- package/utility/globalSchema.js +35 -0
- package/utility/hdbTerms.ts +819 -0
- package/utility/install/checkJWTTokensExist.js +62 -0
- package/utility/install/harperdb.conf +15 -0
- package/utility/install/harperdb.service +14 -0
- package/utility/install/installer.js +635 -0
- package/utility/installation.ts +30 -0
- package/utility/lmdb/DBIDefinition.js +20 -0
- package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
- package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
- package/utility/lmdb/OpenDBIObject.js +31 -0
- package/utility/lmdb/OpenEnvironmentObject.js +41 -0
- package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
- package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
- package/utility/lmdb/cleanLMDBMap.js +65 -0
- package/utility/lmdb/commonUtility.js +130 -0
- package/utility/lmdb/deleteUtility.js +128 -0
- package/utility/lmdb/environmentUtility.js +477 -0
- package/utility/lmdb/searchCursorFunctions.js +187 -0
- package/utility/lmdb/searchUtility.js +918 -0
- package/utility/lmdb/terms.js +57 -0
- package/utility/lmdb/writeUtility.js +407 -0
- package/utility/logging/harper_logger.js +876 -0
- package/utility/logging/logRotator.js +157 -0
- package/utility/logging/logger.ts +24 -0
- package/utility/logging/readLog.js +355 -0
- package/utility/logging/transactionLog.js +57 -0
- package/utility/mount_hdb.js +59 -0
- package/utility/npmUtilities.js +102 -0
- package/utility/operationPermissions.ts +112 -0
- package/utility/operation_authorization.js +836 -0
- package/utility/packageUtils.js +55 -0
- package/utility/password.ts +99 -0
- package/utility/processManagement/processManagement.js +187 -0
- package/utility/processManagement/servicesConfig.js +56 -0
- package/utility/scripts/restartHdb.js +24 -0
- package/utility/scripts/user_data.sh +13 -0
- package/utility/signalling.js +36 -0
- package/utility/terms/certificates.js +81 -0
- package/utility/when.ts +20 -0
- package/validation/bulkDeleteValidator.js +24 -0
- package/validation/check_permissions.js +19 -0
- package/validation/common_validators.js +95 -0
- package/validation/configValidator.js +331 -0
- package/validation/deleteValidator.js +15 -0
- package/validation/fileLoadValidator.js +153 -0
- package/validation/insertValidator.js +40 -0
- package/validation/installValidator.js +37 -0
- package/validation/readLogValidator.js +64 -0
- package/validation/role_validation.js +320 -0
- package/validation/schemaMetadataValidator.js +42 -0
- package/validation/searchValidator.js +166 -0
- package/validation/statusValidator.ts +66 -0
- package/validation/transactionLogValidator.js +33 -0
- package/validation/user_validation.js +55 -0
- package/validation/validationWrapper.js +105 -0
- package/dist/resources/ResourceInterfaceV2.d.ts +0 -21
- package/dist/resources/ResourceInterfaceV2.js.map +0 -1
- package/dist/resources/ResourceV2.d.ts +0 -30
- package/dist/resources/ResourceV2.js +0 -27
- package/dist/resources/ResourceV2.js.map +0 -1
- package/dist/resources/analytics/profile.d.ts +0 -2
- package/dist/resources/analytics/profile.js +0 -144
- package/dist/resources/analytics/profile.js.map +0 -1
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const lmdb = require('lmdb');
|
|
4
|
+
const fs = require('fs-extra');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const common = require('./commonUtility.js');
|
|
7
|
+
const log = require('../logging/harper_logger.js');
|
|
8
|
+
const LMDB_ERRORS = require('../errors/commonErrors.js').LMDB_ERRORS_ENUM;
|
|
9
|
+
const DBIDefinition = require('./DBIDefinition.js');
|
|
10
|
+
const { OpenDBIObject } = require('./OpenDBIObject.js');
|
|
11
|
+
const OpenEnvironmentObject = require('./OpenEnvironmentObject.js');
|
|
12
|
+
const lmdbTerms = require('./terms.js');
|
|
13
|
+
const hdbTerms = require('../hdbTerms.ts');
|
|
14
|
+
const { resetDatabases } = require('../../resources/databases.ts');
|
|
15
|
+
const envMngr = require('../environment/environmentManager.js');
|
|
16
|
+
|
|
17
|
+
const INTERNAL_DBIS_NAME = lmdbTerms.INTERNAL_DBIS_NAME;
|
|
18
|
+
const DBI_DEFINITION_NAME = lmdbTerms.DBI_DEFINITION_NAME;
|
|
19
|
+
const MDB_LEGACY_FILE_NAME = 'data.mdb';
|
|
20
|
+
const MDB_LEGACY_LOCK_FILE_NAME = 'lock.mdb';
|
|
21
|
+
const MDB_FILE_EXTENSION = '.mdb';
|
|
22
|
+
const MDB_LOCK_FILE_SUFFIX = '-lock';
|
|
23
|
+
|
|
24
|
+
/*** VALIDATION FUNCTIONS ***/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* validates the basePath & envName exist. checks basePath is a valid path
|
|
28
|
+
* @param {String} basePath - top level path the environment folder and the .mdb file live under
|
|
29
|
+
* @param {String} envName - name of environment
|
|
30
|
+
*/
|
|
31
|
+
function pathEnvNameValidation(basePath, envName) {
|
|
32
|
+
if (basePath === undefined) {
|
|
33
|
+
throw new Error(LMDB_ERRORS.BASE_PATH_REQUIRED);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (envName === undefined) {
|
|
37
|
+
throw new Error(LMDB_ERRORS.ENV_NAME_REQUIRED);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* checks the environment file exists and returns its path
|
|
43
|
+
* @param {String} basePath - top level path the environment folder and the .mdb file live under
|
|
44
|
+
* @param {String} envName - name of environment
|
|
45
|
+
* @returns {Promise<string>}
|
|
46
|
+
*/
|
|
47
|
+
async function validateEnvironmentPath(basePath, envName, allowV3 = true) {
|
|
48
|
+
//verify the basePath is valid
|
|
49
|
+
try {
|
|
50
|
+
await fs.access(basePath);
|
|
51
|
+
} catch (e) {
|
|
52
|
+
if (e.code === 'ENOENT') {
|
|
53
|
+
throw new Error(LMDB_ERRORS.INVALID_BASE_PATH);
|
|
54
|
+
}
|
|
55
|
+
throw e;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
let standardPath = path.join(basePath, envName + MDB_FILE_EXTENSION);
|
|
59
|
+
await fs.access(standardPath, fs.constants.R_OK | fs.constants.F_OK);
|
|
60
|
+
return standardPath; // success with standard path
|
|
61
|
+
} catch (e) {
|
|
62
|
+
if (e.code === 'ENOENT') {
|
|
63
|
+
if (allowV3) {
|
|
64
|
+
try {
|
|
65
|
+
await fs.access(path.join(basePath, envName, MDB_LEGACY_FILE_NAME), fs.constants.R_OK | fs.constants.F_OK);
|
|
66
|
+
return path.join(basePath, envName);
|
|
67
|
+
} catch (e2) {
|
|
68
|
+
if (e2.code === 'ENOENT') {
|
|
69
|
+
throw new Error(LMDB_ERRORS.INVALID_ENVIRONMENT);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
} else throw new Error(LMDB_ERRORS.INVALID_ENVIRONMENT);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
throw e;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* validates the env & dbiName variables exist
|
|
81
|
+
* @param {lmdb.RootDatabase} env - lmdb environment object
|
|
82
|
+
* @param {String} dbiName - name of the dbi (KV store)
|
|
83
|
+
*/
|
|
84
|
+
function validateEnvDBIName(env, dbiName) {
|
|
85
|
+
common.validateEnv(env);
|
|
86
|
+
|
|
87
|
+
if (dbiName === undefined) {
|
|
88
|
+
throw new Error(LMDB_ERRORS.DBI_NAME_REQUIRED);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/*** ENVIRONMENT FUNCTIONS ***/
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* creates a new environment
|
|
96
|
+
* @param basePath - base path the environment will reside in
|
|
97
|
+
* @param envName - name of the environment
|
|
98
|
+
* @param {Boolean} isTxn - defines if is a transactions environment
|
|
99
|
+
* @returns {Promise<lmdb.RootDatabase>} - LMDB environment object
|
|
100
|
+
*/
|
|
101
|
+
async function createEnvironment(basePath, envName, isTxn = false, isV3 = false) {
|
|
102
|
+
pathEnvNameValidation(basePath, envName);
|
|
103
|
+
let dbName = path.basename(basePath);
|
|
104
|
+
|
|
105
|
+
envName = envName.toString();
|
|
106
|
+
let schemasConfig = envMngr.get(hdbTerms.CONFIG_PARAMS.DATABASES);
|
|
107
|
+
if (!schemasConfig) envMngr.setProperty(hdbTerms.CONFIG_PARAMS.DATABASES, (schemasConfig = {}));
|
|
108
|
+
if (!schemasConfig[dbName]) schemasConfig[dbName] = {};
|
|
109
|
+
schemasConfig[dbName].path = basePath;
|
|
110
|
+
try {
|
|
111
|
+
await validateEnvironmentPath(basePath, envName, isV3);
|
|
112
|
+
//if no error is thrown the environment already exists so we return the handle to that environment
|
|
113
|
+
return openEnvironment(basePath, envName, isTxn);
|
|
114
|
+
} catch (e) {
|
|
115
|
+
if (e.message === LMDB_ERRORS.INVALID_ENVIRONMENT) {
|
|
116
|
+
let environmentPath = path.join(basePath, envName);
|
|
117
|
+
await fs.mkdirp(isV3 ? environmentPath : basePath);
|
|
118
|
+
let envInit = new OpenEnvironmentObject(isV3 ? environmentPath : environmentPath + MDB_FILE_EXTENSION, false);
|
|
119
|
+
let env = lmdb.open(envInit);
|
|
120
|
+
|
|
121
|
+
env.dbis = Object.create(null);
|
|
122
|
+
//next we create an internal dbi to track the named databases
|
|
123
|
+
let dbiInit = new OpenDBIObject(false);
|
|
124
|
+
env.openDB(INTERNAL_DBIS_NAME, dbiInit);
|
|
125
|
+
|
|
126
|
+
//add environment to global variable to cache reference to environment & named databases
|
|
127
|
+
if (global.lmdb_map === undefined) {
|
|
128
|
+
global.lmdb_map = Object.create(null);
|
|
129
|
+
}
|
|
130
|
+
let fullName = getCachedEnvironmentName(basePath, envName, isTxn);
|
|
131
|
+
env[lmdbTerms.ENVIRONMENT_NAME_KEY] = fullName;
|
|
132
|
+
global.lmdb_map[fullName] = env;
|
|
133
|
+
|
|
134
|
+
return env;
|
|
135
|
+
}
|
|
136
|
+
throw e;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* opens an environment
|
|
142
|
+
* @returns {lmdb.RootDatabase} - lmdb environment object
|
|
143
|
+
* @param {String} basePath - the base pase under which the envrinment resides
|
|
144
|
+
* @param {String} envName - the name of the environment
|
|
145
|
+
* @param {Boolean} isTxn - defines if is a transactions environemnt
|
|
146
|
+
*/
|
|
147
|
+
async function openEnvironment(basePath, envName, isTxn = false) {
|
|
148
|
+
pathEnvNameValidation(basePath, envName);
|
|
149
|
+
envName = envName.toString();
|
|
150
|
+
let fullName = getCachedEnvironmentName(basePath, envName, isTxn);
|
|
151
|
+
|
|
152
|
+
if (global.lmdb_map === undefined) {
|
|
153
|
+
global.lmdb_map = Object.create(null);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (global.lmdb_map[fullName] !== undefined) {
|
|
157
|
+
return global.lmdb_map[fullName];
|
|
158
|
+
}
|
|
159
|
+
let envPath = await validateEnvironmentPath(basePath, envName);
|
|
160
|
+
let standardPath = path.join(basePath, envName + MDB_FILE_EXTENSION);
|
|
161
|
+
let readOnly = envPath != standardPath; // legacy database, only open in read only mode
|
|
162
|
+
let envInit = new OpenEnvironmentObject(envPath, readOnly);
|
|
163
|
+
let env = lmdb.open(envInit);
|
|
164
|
+
|
|
165
|
+
env.dbis = Object.create(null);
|
|
166
|
+
|
|
167
|
+
let dbis = listDBIs(env);
|
|
168
|
+
for (let x = 0; x < dbis.length; x++) {
|
|
169
|
+
openDBI(env, dbis[x]);
|
|
170
|
+
}
|
|
171
|
+
env[lmdbTerms.ENVIRONMENT_NAME_KEY] = fullName;
|
|
172
|
+
global.lmdb_map[fullName] = env;
|
|
173
|
+
|
|
174
|
+
return env;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* deletes the environment from the file system & removes the reference from global
|
|
179
|
+
* @param {String} basePath - top level path the environment folder and the .mdb file live under
|
|
180
|
+
* @param {String} envName - name of environment
|
|
181
|
+
* @param {Boolean} isTxn - defines if is a transactions environemnt
|
|
182
|
+
*/
|
|
183
|
+
async function deleteEnvironment(basePath, envName, isTxn = false) {
|
|
184
|
+
pathEnvNameValidation(basePath, envName);
|
|
185
|
+
envName = envName.toString();
|
|
186
|
+
let standardPath = path.join(basePath, envName + MDB_FILE_EXTENSION);
|
|
187
|
+
let dataPath = await validateEnvironmentPath(basePath, envName);
|
|
188
|
+
|
|
189
|
+
if (global.lmdb_map !== undefined) {
|
|
190
|
+
let fullName = getCachedEnvironmentName(basePath, envName, isTxn);
|
|
191
|
+
if (global.lmdb_map[fullName]) {
|
|
192
|
+
let env = global.lmdb_map[fullName];
|
|
193
|
+
await closeEnvironment(env);
|
|
194
|
+
delete global.lmdb_map[fullName];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
await fs.remove(dataPath);
|
|
198
|
+
await fs.remove(
|
|
199
|
+
dataPath === standardPath
|
|
200
|
+
? dataPath + MDB_LOCK_FILE_SUFFIX
|
|
201
|
+
: path.join(path.dirname(dataPath), MDB_LEGACY_LOCK_FILE_NAME)
|
|
202
|
+
); // I suspect we may have problems with this on Windows
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* takes an environment and closes it
|
|
207
|
+
* @param {lmdb.RootDatabase} env
|
|
208
|
+
*/
|
|
209
|
+
async function closeEnvironment(env) {
|
|
210
|
+
//make sure env is actually a reference to the lmdb environment class so we don't blow anything up
|
|
211
|
+
common.validateEnv(env);
|
|
212
|
+
let environmentName = env[lmdbTerms.ENVIRONMENT_NAME_KEY];
|
|
213
|
+
//we need to close the environment to release the file from the process
|
|
214
|
+
await env.close();
|
|
215
|
+
if (environmentName !== undefined && global.lmdb_map !== undefined) {
|
|
216
|
+
delete global.lmdb_map[environmentName];
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* creates a composite name for the environment based on the parent folder name & the environment name.
|
|
222
|
+
* This forces uniqueness when same environment names live under different parent folders
|
|
223
|
+
* @param {String} basePath
|
|
224
|
+
* @param {String} envName
|
|
225
|
+
* @param {Boolean} isTxn - defines if is a transactions environemnt
|
|
226
|
+
* @returns {string}
|
|
227
|
+
*/
|
|
228
|
+
function getCachedEnvironmentName(basePath, envName, isTxn = false) {
|
|
229
|
+
let schemaName = path.basename(basePath);
|
|
230
|
+
let fullName = `${schemaName}.${envName}`;
|
|
231
|
+
if (isTxn === true) {
|
|
232
|
+
fullName = `txn.${fullName}`;
|
|
233
|
+
}
|
|
234
|
+
return fullName;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/*** DBI FUNCTIONS ***/
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* lists dbis in a map with their defintition as the value
|
|
241
|
+
* @param {lmdb.RootDatabase} env - environment object used high level to interact with all data in an environment
|
|
242
|
+
* @returns {{String, DBIDefinition}}
|
|
243
|
+
*/
|
|
244
|
+
function listDBIDefinitions(env) {
|
|
245
|
+
common.validateEnv(env);
|
|
246
|
+
|
|
247
|
+
let dbis = Object.create(null);
|
|
248
|
+
|
|
249
|
+
let dbi = openDBI(env, INTERNAL_DBIS_NAME);
|
|
250
|
+
for (let { key, value } of dbi.getRange({ start: false })) {
|
|
251
|
+
if (key !== INTERNAL_DBIS_NAME) {
|
|
252
|
+
try {
|
|
253
|
+
dbis[key] = Object.assign(new DBIDefinition(), value);
|
|
254
|
+
} catch {
|
|
255
|
+
log.warn(`an internal error occurred: unable to parse DBI Definition for ${key}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return dbis;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* lists all dbis in an environment
|
|
264
|
+
* @param {lmdb.RootDatabase} env - environment object used high level to interact with all data in an environment
|
|
265
|
+
* @returns {[String]}
|
|
266
|
+
*/
|
|
267
|
+
function listDBIs(env) {
|
|
268
|
+
common.validateEnv(env);
|
|
269
|
+
|
|
270
|
+
let dbis = [];
|
|
271
|
+
|
|
272
|
+
let dbi = openDBI(env, INTERNAL_DBIS_NAME);
|
|
273
|
+
|
|
274
|
+
for (let { key } of dbi.getRange({ start: false })) {
|
|
275
|
+
if (key !== INTERNAL_DBIS_NAME) {
|
|
276
|
+
dbis.push(key);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return dbis;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* fetches an individual dbi definition from the internal dbi
|
|
284
|
+
* @param {lmdb.RootDatabase} env
|
|
285
|
+
* @param dbiName
|
|
286
|
+
* @returns {undefined|DBIDefinition}
|
|
287
|
+
*/
|
|
288
|
+
function getDBIDefinition(env, dbiName) {
|
|
289
|
+
let dbi = openDBI(env, INTERNAL_DBIS_NAME);
|
|
290
|
+
|
|
291
|
+
let found = dbi.getEntry(dbiName);
|
|
292
|
+
let dbiDefinition = new DBIDefinition();
|
|
293
|
+
|
|
294
|
+
if (found === undefined) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
try {
|
|
299
|
+
dbiDefinition = Object.assign(dbiDefinition, found.value);
|
|
300
|
+
} catch {
|
|
301
|
+
log.warn(`an internal error occurred: unable to parse DBI Definition for ${found}`);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
return dbiDefinition;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* creates a new named database in an environment
|
|
309
|
+
* @param {lmdb.RootDatabase} env - environment object used high level to interact with all data in an environment
|
|
310
|
+
* @param {String} dbiName - name of the dbi (KV store)
|
|
311
|
+
* @param {Boolean} [dupSort] - optional, determines if the dbi allows duplicate keys or not
|
|
312
|
+
* @param {Boolean} isHashAttribute - defines if the dbi being created is the hash_attribute fro the environment / table
|
|
313
|
+
* @returns {*} - reference to the dbi
|
|
314
|
+
*/
|
|
315
|
+
function createDBI(env, dbiName, dupSort, isHashAttribute = !dupSort) {
|
|
316
|
+
validateEnvDBIName(env, dbiName);
|
|
317
|
+
dbiName = dbiName.toString();
|
|
318
|
+
if (dbiName === INTERNAL_DBIS_NAME) {
|
|
319
|
+
throw new Error(LMDB_ERRORS.CANNOT_CREATE_INTERNAL_DBIS_NAME);
|
|
320
|
+
}
|
|
321
|
+
/*if (isHashAttribute) return; // should already be created
|
|
322
|
+
return env.addAttribute({ name: dbiName, indexed: true });*/
|
|
323
|
+
|
|
324
|
+
try {
|
|
325
|
+
//first check if the dbi exists
|
|
326
|
+
return openDBI(env, dbiName);
|
|
327
|
+
} catch (e) {
|
|
328
|
+
//if not create it
|
|
329
|
+
if (e.message === LMDB_ERRORS.DBI_DOES_NOT_EXIST) {
|
|
330
|
+
//we version just the hash attribute index
|
|
331
|
+
let dbiInit = new OpenDBIObject(dupSort, isHashAttribute === true);
|
|
332
|
+
|
|
333
|
+
let newDbi = env.openDB(dbiName, dbiInit);
|
|
334
|
+
|
|
335
|
+
let dbiDefinition = new DBIDefinition(dupSort === true, isHashAttribute);
|
|
336
|
+
newDbi[DBI_DEFINITION_NAME] = dbiDefinition;
|
|
337
|
+
|
|
338
|
+
let dbis = openDBI(env, INTERNAL_DBIS_NAME);
|
|
339
|
+
dbis.putSync(dbiName, dbiDefinition);
|
|
340
|
+
|
|
341
|
+
env.dbis[dbiName] = newDbi;
|
|
342
|
+
|
|
343
|
+
return newDbi;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
throw e;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* opens an existing named database from an environment
|
|
352
|
+
* @param {lmdb.RootDatabase} env - environment object used thigh level to interact with all data in an environment
|
|
353
|
+
* @param {String} dbiName - name of the dbi (KV store)
|
|
354
|
+
* @returns {lmdb.Database} - returns reference to the dbi
|
|
355
|
+
*/
|
|
356
|
+
function openDBI(env, dbiName) {
|
|
357
|
+
validateEnvDBIName(env, dbiName);
|
|
358
|
+
dbiName = dbiName.toString();
|
|
359
|
+
if (env.dbis[dbiName] !== undefined) {
|
|
360
|
+
return env.dbis[dbiName];
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
let dbiDefinition;
|
|
364
|
+
if (dbiName !== INTERNAL_DBIS_NAME) {
|
|
365
|
+
dbiDefinition = getDBIDefinition(env, dbiName);
|
|
366
|
+
} else {
|
|
367
|
+
dbiDefinition = new DBIDefinition();
|
|
368
|
+
}
|
|
369
|
+
if (dbiDefinition === undefined) {
|
|
370
|
+
throw new Error(LMDB_ERRORS.DBI_DOES_NOT_EXIST);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
let dbi;
|
|
374
|
+
try {
|
|
375
|
+
let dbiInit = new OpenDBIObject(dbiDefinition.dup_sort, dbiDefinition.useVersions);
|
|
376
|
+
dbi = env.openDB(dbiName, dbiInit);
|
|
377
|
+
//current version of lmdb no longer throws an error if you attempt to open a non-existent dbi, simulating old behavior
|
|
378
|
+
if (dbi.db === undefined) {
|
|
379
|
+
throw new Error('MDB_NOTFOUND');
|
|
380
|
+
}
|
|
381
|
+
} catch (e) {
|
|
382
|
+
if (e.message.includes('MDB_NOTFOUND') === true) {
|
|
383
|
+
throw new Error(LMDB_ERRORS.DBI_DOES_NOT_EXIST);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
throw e;
|
|
387
|
+
}
|
|
388
|
+
dbi[DBI_DEFINITION_NAME] = dbiDefinition;
|
|
389
|
+
env.dbis[dbiName] = dbi;
|
|
390
|
+
return dbi;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* gets the statistics for a named database from the environment
|
|
395
|
+
* @param {lmdb.RootDatabase} env - environment object used thigh level to interact with all data in an environment
|
|
396
|
+
* @param {String} dbiName - name of the dbi (KV store)
|
|
397
|
+
* @returns {void | Promise<Stats> | *} - object holding stats for the dbi
|
|
398
|
+
*/
|
|
399
|
+
function statDBI(env, dbiName) {
|
|
400
|
+
validateEnvDBIName(env, dbiName);
|
|
401
|
+
dbiName = dbiName.toString();
|
|
402
|
+
let dbi = openDBI(env, dbiName);
|
|
403
|
+
|
|
404
|
+
let stats = dbi.getStats();
|
|
405
|
+
if (dbi[lmdbTerms.DBI_DEFINITION_NAME].isPrimaryKey && stats.entryCount > 0) {
|
|
406
|
+
stats.entryCount--;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return stats;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* removes a named database from an environment
|
|
414
|
+
* @param {lmdb.RootDatabase} env - environment object used thigh level to interact with all data in an environment
|
|
415
|
+
* @param {String} dbiName - name of the dbi (KV store)
|
|
416
|
+
*/
|
|
417
|
+
function dropDBI(env, dbiName) {
|
|
418
|
+
validateEnvDBIName(env, dbiName);
|
|
419
|
+
dbiName = dbiName.toString();
|
|
420
|
+
if (dbiName === INTERNAL_DBIS_NAME) {
|
|
421
|
+
throw new Error(LMDB_ERRORS.CANNOT_DROP_INTERNAL_DBIS_NAME);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
let dbi = openDBI(env, dbiName);
|
|
425
|
+
dbi.dropSync();
|
|
426
|
+
|
|
427
|
+
if (env.dbis !== undefined) {
|
|
428
|
+
delete env.dbis[dbiName];
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
let dbis = openDBI(env, INTERNAL_DBIS_NAME);
|
|
432
|
+
dbis.removeSync(dbiName);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* opens/ creates all specified attributes
|
|
437
|
+
* @param {lmdb.RootDatabase} env - lmdb environment object
|
|
438
|
+
* @param {String} hash_attribute - name of the table's hash attribute
|
|
439
|
+
* @param {Array.<String>} writeAttributes - list of all attributes to write to the database
|
|
440
|
+
*/
|
|
441
|
+
function initializeDBIs(env, hash_attribute, writeAttributes) {
|
|
442
|
+
let createdAttributes;
|
|
443
|
+
for (let x = 0; x < writeAttributes.length; x++) {
|
|
444
|
+
let attribute = writeAttributes[x];
|
|
445
|
+
|
|
446
|
+
//check the internal cache to see if the dbi has been intialized
|
|
447
|
+
if (!env.dbis[attribute]) {
|
|
448
|
+
//if the dbi has not been intialized & cached attempt to open
|
|
449
|
+
try {
|
|
450
|
+
openDBI(env, attribute);
|
|
451
|
+
} catch (e) {
|
|
452
|
+
//if not opened, create it
|
|
453
|
+
if (e.message === LMDB_ERRORS.DBI_DOES_NOT_EXIST) {
|
|
454
|
+
createDBI(env, attribute, attribute !== hash_attribute, attribute === hash_attribute);
|
|
455
|
+
createdAttributes = true;
|
|
456
|
+
} else {
|
|
457
|
+
throw e;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
if (createdAttributes) resetDatabases();
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
module.exports = {
|
|
466
|
+
openDBI,
|
|
467
|
+
openEnvironment,
|
|
468
|
+
createEnvironment,
|
|
469
|
+
listDBIs,
|
|
470
|
+
listDBIDefinitions,
|
|
471
|
+
createDBI,
|
|
472
|
+
dropDBI,
|
|
473
|
+
statDBI,
|
|
474
|
+
deleteEnvironment,
|
|
475
|
+
initializeDBIs,
|
|
476
|
+
closeEnvironment,
|
|
477
|
+
};
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const hdbTerms = require('../hdbTerms.ts');
|
|
4
|
+
|
|
5
|
+
function parseRow(originalObject, attributes) {
|
|
6
|
+
let returnObject = Object.create(null);
|
|
7
|
+
|
|
8
|
+
if (attributes.length === 1 && hdbTerms.SEARCH_WILDCARDS.indexOf(attributes[0]) >= 0) {
|
|
9
|
+
Object.assign(returnObject, originalObject);
|
|
10
|
+
} else {
|
|
11
|
+
for (let x = 0; x < attributes.length; x++) {
|
|
12
|
+
let attribute = attributes[x];
|
|
13
|
+
let attributeValue = originalObject[attribute];
|
|
14
|
+
returnObject[attribute] = attributeValue === undefined ? null : attributeValue;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return returnObject;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The internal iterator function for searchAll
|
|
23
|
+
* @param {[String]} attributes
|
|
24
|
+
* @param {String|Number} key
|
|
25
|
+
* @param {*} value
|
|
26
|
+
* @param {[]} results
|
|
27
|
+
*/
|
|
28
|
+
function searchAll(attributes, key, value, results) {
|
|
29
|
+
let obj = parseRow(value, attributes);
|
|
30
|
+
results.push(obj);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The internal iterator function for searchAll
|
|
35
|
+
* @param {[String]} attributes
|
|
36
|
+
* @param {String|Number} key
|
|
37
|
+
* @param {*} value
|
|
38
|
+
* @param {Object} results
|
|
39
|
+
*/
|
|
40
|
+
function searchAllToMap(attributes, key, value, results) {
|
|
41
|
+
let obj = parseRow(value, attributes);
|
|
42
|
+
results[key] = obj;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The internal iterator function for iterateDBI
|
|
47
|
+
* @param {*} key
|
|
48
|
+
* @param {*} value
|
|
49
|
+
* @param {[]} results
|
|
50
|
+
*/
|
|
51
|
+
function iterateDBI(key, value, results) {
|
|
52
|
+
if (results[key] === undefined) {
|
|
53
|
+
results[key] = [];
|
|
54
|
+
}
|
|
55
|
+
results[key].push(value);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* internal function used to add hash value to results, in the scenario of a hash_attribute dbi we just need to add the found key, otherwise we get the value
|
|
60
|
+
* @param {*} key
|
|
61
|
+
* @param {*} value
|
|
62
|
+
* @param {[[],[]]} results
|
|
63
|
+
* @param {String} hash_attribute
|
|
64
|
+
* @param {String} attribute
|
|
65
|
+
*/
|
|
66
|
+
function pushResults(key, value, results, hash_attribute, attribute) {
|
|
67
|
+
let newObject = Object.create(null);
|
|
68
|
+
newObject[attribute] = key;
|
|
69
|
+
let hashValue = undefined;
|
|
70
|
+
|
|
71
|
+
if (hash_attribute === attribute) {
|
|
72
|
+
hashValue = key;
|
|
73
|
+
} else {
|
|
74
|
+
hashValue = value;
|
|
75
|
+
if (hash_attribute !== undefined) {
|
|
76
|
+
newObject[hash_attribute] = hashValue;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
results[0].push(hashValue);
|
|
80
|
+
results[1].push(newObject);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The internal iterator function for endsWith
|
|
85
|
+
* @param {String} compareValue
|
|
86
|
+
* @param {*} found
|
|
87
|
+
* @param {*} value
|
|
88
|
+
* @param {Object} results
|
|
89
|
+
* @param {String} hash_attribute
|
|
90
|
+
* @param {String} attribute
|
|
91
|
+
*/
|
|
92
|
+
function endsWith(compareValue, found, value, results, hash_attribute, attribute) {
|
|
93
|
+
let foundStr = found.toString();
|
|
94
|
+
if (foundStr.endsWith(compareValue)) {
|
|
95
|
+
pushResults(found, value, results, hash_attribute, attribute);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The internal iterator function for contains
|
|
101
|
+
* @param {*} compareValue
|
|
102
|
+
* @param {*} key
|
|
103
|
+
* @param {*} value
|
|
104
|
+
* @param {Object} results
|
|
105
|
+
* @param {String} hash_attribute
|
|
106
|
+
* @param {String} attribute
|
|
107
|
+
*/
|
|
108
|
+
function contains(compareValue, key, value, results, hash_attribute, attribute) {
|
|
109
|
+
let foundStr = key.toString();
|
|
110
|
+
if (foundStr.includes(compareValue)) {
|
|
111
|
+
pushResults(key, value, results, hash_attribute, attribute);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The internal iterator function for greater than, used for string keyed dbis and a string compareValue
|
|
117
|
+
* @param {*} compareValue
|
|
118
|
+
* @param {*} key
|
|
119
|
+
* @param {*} value
|
|
120
|
+
* @param {Object} results
|
|
121
|
+
* @param {String} hash_attribute
|
|
122
|
+
* @param {String} attribute
|
|
123
|
+
*/
|
|
124
|
+
function greaterThanCompare(compareValue, key, value, results, hash_attribute, attribute) {
|
|
125
|
+
if (key > compareValue) {
|
|
126
|
+
pushResults(key, value, results, hash_attribute, attribute);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* The internal iterator function for greater than equal, used for string keyed dbis and a sring compareValue
|
|
132
|
+
* @param {*} key
|
|
133
|
+
* @param {*} value
|
|
134
|
+
* @param {[[],[]]} results
|
|
135
|
+
* @param {*} compareValue
|
|
136
|
+
* @param {String} hash_attribute
|
|
137
|
+
* @param {String} attribute
|
|
138
|
+
*/
|
|
139
|
+
function greaterThanEqualCompare(compareValue, key, value, results, hash_attribute, attribute) {
|
|
140
|
+
if (key >= compareValue) {
|
|
141
|
+
pushResults(key, value, results, hash_attribute, attribute);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* The internal iterator function for less than, used for string keyed dbis and a string compareValue
|
|
147
|
+
* @param {*} key
|
|
148
|
+
* @param {*} value
|
|
149
|
+
* @param {Object} results
|
|
150
|
+
* @param {*} compareValue
|
|
151
|
+
* @param {String} hash_attribute
|
|
152
|
+
* @param {String} attribute
|
|
153
|
+
*/
|
|
154
|
+
function lessThanCompare(compareValue, key, value, results, hash_attribute, attribute) {
|
|
155
|
+
if (key < compareValue) {
|
|
156
|
+
pushResults(key, value, results, hash_attribute, attribute);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* The internal iterator function for less than equal, used for string keyed dbis and a string compareValue
|
|
162
|
+
* @param {*} key
|
|
163
|
+
* @param {*} value
|
|
164
|
+
* @param {[[],[]]} results
|
|
165
|
+
* @param {*} compareValue
|
|
166
|
+
* @param {String} hash_attribute
|
|
167
|
+
* @param {String} attribute
|
|
168
|
+
*/
|
|
169
|
+
function lessThanEqualCompare(compareValue, key, value, results, hash_attribute, attribute) {
|
|
170
|
+
if (key <= compareValue) {
|
|
171
|
+
pushResults(key, value, results, hash_attribute, attribute);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
module.exports = {
|
|
176
|
+
parseRow,
|
|
177
|
+
searchAll,
|
|
178
|
+
searchAllToMap,
|
|
179
|
+
iterateDBI,
|
|
180
|
+
endsWith,
|
|
181
|
+
contains,
|
|
182
|
+
greaterThanCompare,
|
|
183
|
+
greaterThanEqualCompare,
|
|
184
|
+
lessThanCompare,
|
|
185
|
+
lessThanEqualCompare,
|
|
186
|
+
pushResults,
|
|
187
|
+
};
|