@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,349 @@
|
|
|
1
|
+
import { Transaction as LMDBNativeTransaction } from 'lmdb';
|
|
2
|
+
import {
|
|
3
|
+
DatabaseTransaction,
|
|
4
|
+
type CommitOptions,
|
|
5
|
+
type TransactionWrite,
|
|
6
|
+
type CommitResolution,
|
|
7
|
+
} from './DatabaseTransaction';
|
|
8
|
+
import { getNextMonotonicTime } from '../utility/lmdb/commonUtility.js';
|
|
9
|
+
import * as harperLogger from '../utility/logging/harper_logger.js';
|
|
10
|
+
import type { Context } from './ResourceInterface.ts';
|
|
11
|
+
import { Transaction as RocksTransaction } from '@harperfast/rocksdb-js';
|
|
12
|
+
import type { RootDatabaseKind } from './databases.ts';
|
|
13
|
+
|
|
14
|
+
const MAX_OPTIMISTIC_SIZE = 100;
|
|
15
|
+
const trackedTxns = new Set<DatabaseTransaction>();
|
|
16
|
+
export const TRANSACTION_STATE = {
|
|
17
|
+
CLOSED: 0, // the transaction has been committed or aborted and can no longer be used for writes (if read txn is active, it can be used for reads)
|
|
18
|
+
OPEN: 1, // the transaction is open and can be used for reads and writes
|
|
19
|
+
LINGERING: 2, // the transaction has completed a read, but can be used for immediate writes
|
|
20
|
+
};
|
|
21
|
+
let outstandingCommit;
|
|
22
|
+
let confirmReplication;
|
|
23
|
+
export function replicationConfirmation(callback) {
|
|
24
|
+
confirmReplication = callback;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
type ReadTransaction = LMDBNativeTransaction & {
|
|
28
|
+
openTimer?: number;
|
|
29
|
+
retryRisk?: number;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export class LMDBTransaction extends DatabaseTransaction {
|
|
33
|
+
#context: Context;
|
|
34
|
+
writes: TransactionWrite[] = []; // the set of writes to commit if the conditions are met
|
|
35
|
+
validated = 0;
|
|
36
|
+
_timestamp = 0;
|
|
37
|
+
declare next: DatabaseTransaction;
|
|
38
|
+
declare stale: boolean;
|
|
39
|
+
overloadChecked: boolean;
|
|
40
|
+
open = TRANSACTION_STATE.OPEN;
|
|
41
|
+
|
|
42
|
+
getReadTxn(): ReadTransaction {
|
|
43
|
+
// used optimistically
|
|
44
|
+
this.readTxnRefCount = (this.readTxnRefCount || 0) + 1;
|
|
45
|
+
this.timeout = txnExpiration; // reset the timeout
|
|
46
|
+
if (this.stale) this.stale = false;
|
|
47
|
+
if (this.readTxn) {
|
|
48
|
+
if (this.readTxn.openTimer) this.readTxn.openTimer = 0;
|
|
49
|
+
return this.readTxn;
|
|
50
|
+
}
|
|
51
|
+
if (this.open !== TRANSACTION_STATE.OPEN) return; // can not start a new read transaction as there is no future commit that will take place, just have to allow the read to latest database state
|
|
52
|
+
|
|
53
|
+
// Get a read transaction from lmdb-js; make sure we do this first, as it can fail, we don't want to leave the transaction in a bad state with readTxnsUsed > 0
|
|
54
|
+
this.readTxn = this.db.useReadTransaction();
|
|
55
|
+
|
|
56
|
+
this.readTxnsUsed = 1;
|
|
57
|
+
if (this.readTxn.openTimer) this.readTxn.openTimer = 0;
|
|
58
|
+
trackedTxns.add(this);
|
|
59
|
+
return this.readTxn;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
useReadTxn() {
|
|
63
|
+
this.getReadTxn();
|
|
64
|
+
if (this.readTxn) {
|
|
65
|
+
(this.readTxn as LMDBTransaction).use();
|
|
66
|
+
this.readTxnsUsed++;
|
|
67
|
+
}
|
|
68
|
+
return this.readTxn;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
doneReadTxn() {
|
|
72
|
+
if (!this.readTxn) return;
|
|
73
|
+
if (this.readTxn instanceof RocksTransaction) {
|
|
74
|
+
// TODO: Implement this for RocksDB
|
|
75
|
+
} else {
|
|
76
|
+
(this.readTxn as LMDBTransaction).done();
|
|
77
|
+
}
|
|
78
|
+
if (--this.readTxnsUsed === 0) {
|
|
79
|
+
trackedTxns.delete(this);
|
|
80
|
+
this.readTxn = null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
disregardReadTxn(): void {
|
|
85
|
+
if (--this.readTxnRefCount === 0 && this.readTxnsUsed === 1) {
|
|
86
|
+
this.doneReadTxn();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
addWrite(operation: TransactionWrite) {
|
|
91
|
+
if (this.open === TRANSACTION_STATE.CLOSED) {
|
|
92
|
+
throw new Error('Can not use a transaction that is no longer open');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (this.open === TRANSACTION_STATE.LINGERING) {
|
|
96
|
+
// if the transaction is lingering, it is already committed, so we need to commit the write immediately
|
|
97
|
+
const immediateTxn = new ImmediateTransaction(this.db);
|
|
98
|
+
immediateTxn.addWrite(operation);
|
|
99
|
+
return immediateTxn.commit({});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
this.writes.push(operation); // standard path, add to current transaction
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
removeWrite(operation: TransactionWrite) {
|
|
106
|
+
const index = this.writes.indexOf(operation);
|
|
107
|
+
if (index > -1) this.writes[index] = null;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Resolves with information on the timestamp and success of the commit
|
|
112
|
+
*/
|
|
113
|
+
commit(options: CommitOptions = {}): Promise<CommitResolution> {
|
|
114
|
+
let txnTime = this.timestamp;
|
|
115
|
+
if (!txnTime) txnTime = this.timestamp = options.timestamp || getNextMonotonicTime();
|
|
116
|
+
if (!options.timestamp) options.timestamp = txnTime;
|
|
117
|
+
const retries = options.retries || 0;
|
|
118
|
+
// now validate
|
|
119
|
+
if (this.validated < this.writes.length) {
|
|
120
|
+
try {
|
|
121
|
+
const start = this.validated;
|
|
122
|
+
// record the number of writes that have been validated so if we re-execute
|
|
123
|
+
// and the number is increased we can validate the new entries
|
|
124
|
+
this.validated = this.writes.length;
|
|
125
|
+
for (let i = start; i < this.validated; i++) {
|
|
126
|
+
const write = this.writes[i];
|
|
127
|
+
write?.validate?.(this.timestamp);
|
|
128
|
+
}
|
|
129
|
+
let hasBefore;
|
|
130
|
+
for (let i = start; i < this.validated; i++) {
|
|
131
|
+
const write = this.writes[i];
|
|
132
|
+
if (!write) continue;
|
|
133
|
+
if (write.before || write.beforeIntermediate) {
|
|
134
|
+
hasBefore = true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Now we need to let any "before" actions execute. These are calls to the sources,
|
|
138
|
+
// and we want to follow the order of the source sequence so that later, more canonical
|
|
139
|
+
// source writes will finish (with right to refuse/abort) before proceeeding to less
|
|
140
|
+
// canonical sources.
|
|
141
|
+
if (hasBefore) {
|
|
142
|
+
return (async () => {
|
|
143
|
+
try {
|
|
144
|
+
for (let phase = 0; phase < 2; phase++) {
|
|
145
|
+
let completion;
|
|
146
|
+
for (let i = start; i < this.validated; i++) {
|
|
147
|
+
const write = this.writes[i];
|
|
148
|
+
if (!write) continue;
|
|
149
|
+
const before = write[phase === 0 ? 'before' : 'beforeIntermediate'];
|
|
150
|
+
if (before) {
|
|
151
|
+
const nextCompletion = before();
|
|
152
|
+
if (completion) {
|
|
153
|
+
if (completion.push) completion.push(nextCompletion);
|
|
154
|
+
else completion = [completion, nextCompletion];
|
|
155
|
+
} else completion = nextCompletion;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (completion) await (completion.push ? Promise.all(completion) : completion);
|
|
159
|
+
}
|
|
160
|
+
} catch (error) {
|
|
161
|
+
this.abort();
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
return this.commit(options);
|
|
165
|
+
})();
|
|
166
|
+
}
|
|
167
|
+
} catch (error) {
|
|
168
|
+
this.abort();
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// release the read snapshot so we don't keep it open longer than necessary
|
|
173
|
+
if (!retries) this.doneReadTxn();
|
|
174
|
+
this.open = options?.doneWriting ? TRANSACTION_STATE.LINGERING : TRANSACTION_STATE.OPEN;
|
|
175
|
+
let resolution;
|
|
176
|
+
const completions = [];
|
|
177
|
+
let writeIndex = 0;
|
|
178
|
+
this.writes = this.writes.filter((write) => write); // filter out removed entries
|
|
179
|
+
const doWrite = (write) => {
|
|
180
|
+
write.commit(txnTime, write.entry, retries);
|
|
181
|
+
};
|
|
182
|
+
// this uses optimistic locking to submit a transaction, conditioning each write on the expected version
|
|
183
|
+
const nextCondition = () => {
|
|
184
|
+
const write = this.writes[writeIndex++];
|
|
185
|
+
if (write) {
|
|
186
|
+
if (write.key) {
|
|
187
|
+
if (retries > 0 || !write.entry) {
|
|
188
|
+
// if the first optimistic attempt failed, we need to try again with the very latest version
|
|
189
|
+
write.entry = write.store.getEntry(write.key);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const conditionResolution = write.store.ifVersion(write.key, write.entry?.version ?? null, nextCondition);
|
|
193
|
+
resolution = resolution || conditionResolution;
|
|
194
|
+
} else {
|
|
195
|
+
nextCondition();
|
|
196
|
+
}
|
|
197
|
+
} else {
|
|
198
|
+
for (const write of this.writes) {
|
|
199
|
+
doWrite(write);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
const db = this.db;
|
|
205
|
+
// only commit if there are writes
|
|
206
|
+
if (this.writes.length > 0) {
|
|
207
|
+
// we also maintain a retry risk for the transaction, which is a measure of how likely it is that the transaction
|
|
208
|
+
// will fail and retry due to contention. This is used to determine when to give up on optimistic writes and
|
|
209
|
+
// use a real (async) transaction to get exclusive access to the data
|
|
210
|
+
if (db?.retryRisk) db.retryRisk *= 0.99; // gradually decay the retry risk
|
|
211
|
+
if (this.writes.length + (db?.retryRisk || 0) < MAX_OPTIMISTIC_SIZE >> retries) nextCondition();
|
|
212
|
+
else {
|
|
213
|
+
// if it is too big to expect optimistic writes to work, or we have done too many retries we use
|
|
214
|
+
// a real LMDB transaction to get exclusive access to reading and writing
|
|
215
|
+
resolution = this.writes[0].store.transaction(() => {
|
|
216
|
+
for (const write of this.writes) {
|
|
217
|
+
// we load latest data while in the transaction
|
|
218
|
+
write.entry = write.store.getEntry(write.key);
|
|
219
|
+
doWrite(write);
|
|
220
|
+
}
|
|
221
|
+
return true; // success. always success
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (resolution) {
|
|
227
|
+
if (!outstandingCommit) {
|
|
228
|
+
outstandingCommit = resolution;
|
|
229
|
+
outstandingCommit.then(() => {
|
|
230
|
+
outstandingCommit = null;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return resolution.then((resolution) => {
|
|
235
|
+
if (resolution) {
|
|
236
|
+
if (this.next) {
|
|
237
|
+
completions.push(this.next.commit(options));
|
|
238
|
+
}
|
|
239
|
+
if (options?.flush) {
|
|
240
|
+
completions.push(this.writes[0].store.flushed);
|
|
241
|
+
}
|
|
242
|
+
if (this.replicatedConfirmation) {
|
|
243
|
+
// if we want to wait for replication confirmation, we need to track the transaction times
|
|
244
|
+
// and when replication notifications come in, we count the number of confirms until we reach the desired number
|
|
245
|
+
const databaseName = this.writes[0].store.rootStore.databaseName;
|
|
246
|
+
const lastWrite = this.writes[this.writes.length - 1];
|
|
247
|
+
if (confirmReplication && lastWrite)
|
|
248
|
+
completions.push(
|
|
249
|
+
confirmReplication(
|
|
250
|
+
databaseName,
|
|
251
|
+
lastWrite.store.getEntry(lastWrite.key).localTime,
|
|
252
|
+
this.replicatedConfirmation
|
|
253
|
+
)
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
// now reset transactions tracking; this transaction be reused and committed again
|
|
257
|
+
this.writes = [];
|
|
258
|
+
this.timestamp = 0;
|
|
259
|
+
this.next = null;
|
|
260
|
+
return Promise.all(completions).then(() => {
|
|
261
|
+
return {
|
|
262
|
+
txnTime,
|
|
263
|
+
};
|
|
264
|
+
});
|
|
265
|
+
} else {
|
|
266
|
+
// if the transaction failed, we need to retry. First record this as an increased risk of contention/retry
|
|
267
|
+
// for future transactions
|
|
268
|
+
if (db) {
|
|
269
|
+
db.retryRisk = (db.retryRisk || 0) + MAX_OPTIMISTIC_SIZE / 2;
|
|
270
|
+
}
|
|
271
|
+
if (options) options.retries = retries + 1;
|
|
272
|
+
else options = { retries: 1 };
|
|
273
|
+
return this.commit(options); // try again
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
const txnResolution: CommitResolution = {
|
|
278
|
+
txnTime,
|
|
279
|
+
};
|
|
280
|
+
if (this.next) {
|
|
281
|
+
// now run any other transactions
|
|
282
|
+
const nextResolution = this.next?.commit(options);
|
|
283
|
+
if (nextResolution?.then)
|
|
284
|
+
return nextResolution?.then((nextResolution) => ({
|
|
285
|
+
txnTime,
|
|
286
|
+
next: nextResolution,
|
|
287
|
+
}));
|
|
288
|
+
txnResolution.next = nextResolution;
|
|
289
|
+
}
|
|
290
|
+
return txnResolution;
|
|
291
|
+
}
|
|
292
|
+
abort(): void {
|
|
293
|
+
while (this.readTxnsUsed > 0) this.doneReadTxn(); // release the read snapshot when we abort, we assume we don't need it
|
|
294
|
+
this.open = TRANSACTION_STATE.CLOSED;
|
|
295
|
+
// reset the transaction
|
|
296
|
+
this.writes = [];
|
|
297
|
+
}
|
|
298
|
+
save() {
|
|
299
|
+
// noop for LMDB
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export class ImmediateTransaction extends LMDBTransaction {
|
|
304
|
+
constructor(db: RootDatabaseKind) {
|
|
305
|
+
super();
|
|
306
|
+
this.db = db;
|
|
307
|
+
}
|
|
308
|
+
save(_transaction: ImmediateTransaction, _isRetry = false) {
|
|
309
|
+
return this.commit();
|
|
310
|
+
}
|
|
311
|
+
get timestamp() {
|
|
312
|
+
return this._timestamp || (this._timestamp = getNextMonotonicTime());
|
|
313
|
+
}
|
|
314
|
+
getReadTxn() {
|
|
315
|
+
return; // no transaction means read latest
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
let txnExpiration = 30000;
|
|
320
|
+
let timer;
|
|
321
|
+
|
|
322
|
+
function startMonitoringTxns() {
|
|
323
|
+
timer = setInterval(function () {
|
|
324
|
+
for (const txn of trackedTxns) {
|
|
325
|
+
if (txn.timeout <= 0) {
|
|
326
|
+
const url = txn.getContext()?.url;
|
|
327
|
+
harperLogger.error(
|
|
328
|
+
`Transaction was open too long and has been committed, from table: ${
|
|
329
|
+
txn.db?.name + (url ? ' path: ' + url : '')
|
|
330
|
+
}`
|
|
331
|
+
);
|
|
332
|
+
// reset the transaction
|
|
333
|
+
txn.commit();
|
|
334
|
+
txn.timeout = txnExpiration;
|
|
335
|
+
} else {
|
|
336
|
+
txn.timeout -= txnExpiration;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}, txnExpiration).unref();
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
startMonitoringTxns();
|
|
343
|
+
|
|
344
|
+
export function setTxnExpiration(ms) {
|
|
345
|
+
clearInterval(timer);
|
|
346
|
+
txnExpiration = ms;
|
|
347
|
+
startMonitoringTxns();
|
|
348
|
+
return trackedTxns;
|
|
349
|
+
}
|