@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,72 @@
|
|
|
1
|
+
import { table } from '../databases.ts';
|
|
2
|
+
import crypto from 'crypto';
|
|
3
|
+
import { isIPv6 } from 'node:net';
|
|
4
|
+
import type { Resource } from '../Resource.ts';
|
|
5
|
+
|
|
6
|
+
export const nodeIds = new Map<string, number>();
|
|
7
|
+
|
|
8
|
+
type AnalyticsHostnameResource = Resource & { hostname: string };
|
|
9
|
+
|
|
10
|
+
let AnalyticsHostnameTable: AnalyticsHostnameResource;
|
|
11
|
+
export function getAnalyticsHostnameTable() {
|
|
12
|
+
if (!AnalyticsHostnameTable) {
|
|
13
|
+
AnalyticsHostnameTable = table({
|
|
14
|
+
table: 'hdb_analytics_hostname',
|
|
15
|
+
database: 'system',
|
|
16
|
+
attributes: [
|
|
17
|
+
{
|
|
18
|
+
name: 'id',
|
|
19
|
+
isPrimaryKey: true,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'hostname',
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return AnalyticsHostnameTable;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const IPv4Pattern = /(\d{1,3}\.){3}\d{1,3}$/;
|
|
31
|
+
|
|
32
|
+
export function normalizeIPv6(ipv6: string) {
|
|
33
|
+
// for embedded IPv4 in IPv6 e.g. ::ffff:127.0.0.1
|
|
34
|
+
ipv6 = ipv6.replace(IPv4Pattern, (ipv4) => {
|
|
35
|
+
const [a, b, c, d] = ipv4.split('.').map((n) => parseInt(n));
|
|
36
|
+
return ((a << 8) | b).toString(16) + ':' + ((c << 8) | d).toString(16);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// shortened IPs e.g. 2001:db8::1428:57ab
|
|
40
|
+
ipv6 = ipv6.replace('::', ':'.repeat(10 - ipv6.split(':').length));
|
|
41
|
+
|
|
42
|
+
return ipv6
|
|
43
|
+
.toLowerCase()
|
|
44
|
+
.split(':')
|
|
45
|
+
.map((v) => v.padStart(4, '0'))
|
|
46
|
+
.join(':');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function nodeHashToNumber(nodeHash: Uint8Array): number {
|
|
50
|
+
if (nodeHash.length !== 4) {
|
|
51
|
+
throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${nodeHash.length} bytes`);
|
|
52
|
+
}
|
|
53
|
+
return (nodeHash[0] << 24) | (nodeHash[1] << 16) | (nodeHash[2] << 8) | nodeHash[3];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** stableNodeId takes a hostname or IP address and returns a number containing
|
|
57
|
+
* the 32-bit SHAKE128 hash of the hostname or IP address. The astute among you
|
|
58
|
+
* will now be thinking, "Why return a 32-bit hash of a 32-bit IPv4 address?"
|
|
59
|
+
* And the answer is that this is primarily intended for identifying cluster
|
|
60
|
+
* nodes, and in production those should always use hostnames for TLS security.
|
|
61
|
+
* So it doesn't make much sense to optimize the IPv4 use case.
|
|
62
|
+
*/
|
|
63
|
+
export function stableNodeId(nodeAddrOrName: string): number {
|
|
64
|
+
const hasher = crypto.createHash('shake128', { outputLength: 4 }); // 4 bytes = 32 bits
|
|
65
|
+
let normalized: string;
|
|
66
|
+
if (isIPv6(nodeAddrOrName)) {
|
|
67
|
+
normalized = normalizeIPv6(nodeAddrOrName);
|
|
68
|
+
} else {
|
|
69
|
+
normalized = nodeAddrOrName.toLowerCase();
|
|
70
|
+
}
|
|
71
|
+
return nodeHashToNumber(Uint8Array.from(hasher.update(normalized).digest()));
|
|
72
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const METRIC = {
|
|
2
|
+
TABLE_SIZE: 'table-size',
|
|
3
|
+
DATABASE_SIZE: 'database-size',
|
|
4
|
+
STORAGE_VOLUME: 'storage-volume',
|
|
5
|
+
MAIN_THREAD_UTILIZATION: 'main-thread-utilization',
|
|
6
|
+
RESOURCE_USAGE: 'resource-usage',
|
|
7
|
+
UTILIZATION: 'utilization',
|
|
8
|
+
} as const;
|
|
9
|
+
|
|
10
|
+
export type BuiltInMetricName = (typeof METRIC)[keyof typeof METRIC];
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import type { Metric } from './write.ts';
|
|
2
|
+
import harperLogger from '../../utility/logging/harper_logger.js';
|
|
3
|
+
const { forComponent } = harperLogger;
|
|
4
|
+
import { getAnalyticsHostnameTable, stableNodeId } from './hostnames.ts';
|
|
5
|
+
import type { Condition, Conditions } from '../ResourceInterface.ts';
|
|
6
|
+
import { METRIC, type BuiltInMetricName } from './metadata.ts';
|
|
7
|
+
import { CONFIG_PARAMS } from '../../utility/hdbTerms.ts';
|
|
8
|
+
import { get as envGet } from '../../utility/environment/environmentManager.js';
|
|
9
|
+
|
|
10
|
+
// default to one week time window for finding custom metrics
|
|
11
|
+
const defaultCustomMetricWindow = 1000 * 60 * 60 * 24 * 7;
|
|
12
|
+
|
|
13
|
+
const log = forComponent('analytics').conditional;
|
|
14
|
+
|
|
15
|
+
async function lookupHostname(nodeId: number): Promise<string | undefined> {
|
|
16
|
+
const result = await getAnalyticsHostnameTable().get(nodeId);
|
|
17
|
+
if (result?.hostname) return result.hostname;
|
|
18
|
+
if (nodeId === stableNodeId(server.hostname)) return server.hostname;
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function isSelected(querySelect: string[], attr: string) {
|
|
23
|
+
return querySelect.length === 0 || querySelect.includes(attr);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface GetAnalyticsRequest {
|
|
27
|
+
metric: string;
|
|
28
|
+
start_time?: number;
|
|
29
|
+
end_time?: number;
|
|
30
|
+
get_attributes?: string[];
|
|
31
|
+
coalesce_time?: boolean;
|
|
32
|
+
conditions?: Conditions;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type GetAnalyticsResponse = Metric[];
|
|
36
|
+
|
|
37
|
+
export function getOp(req: GetAnalyticsRequest): Promise<GetAnalyticsResponse> {
|
|
38
|
+
log.trace?.('get_analytics request:', req);
|
|
39
|
+
return get(req.metric, {
|
|
40
|
+
getAttributes: req.get_attributes,
|
|
41
|
+
startTime: req.start_time,
|
|
42
|
+
endTime: req.end_time,
|
|
43
|
+
coalesceTime: req.coalesce_time,
|
|
44
|
+
additionalConditions: req.conditions,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function conformCondition(condition: Condition): Condition {
|
|
49
|
+
if ('conditions' in condition) {
|
|
50
|
+
return {
|
|
51
|
+
...condition,
|
|
52
|
+
conditions: condition.conditions.map(conformCondition),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
attribute: condition.search_attribute ?? condition.attribute,
|
|
57
|
+
comparator: condition.search_type ?? condition.comparator,
|
|
58
|
+
value: condition.search_value ?? condition.value,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function* coalesceResults(results: Metric[], window: number): AsyncGenerator<Metric> {
|
|
63
|
+
let coalesceId: any;
|
|
64
|
+
for await (const result of results) {
|
|
65
|
+
const id = result.id;
|
|
66
|
+
if (!coalesceId) {
|
|
67
|
+
coalesceId = id;
|
|
68
|
+
}
|
|
69
|
+
const delta = Math.abs(id - coalesceId);
|
|
70
|
+
if (delta < window) {
|
|
71
|
+
yield { ...result, id: coalesceId };
|
|
72
|
+
} else {
|
|
73
|
+
yield result;
|
|
74
|
+
coalesceId = id;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
interface GetAnalyticsOpts {
|
|
80
|
+
getAttributes?: string[];
|
|
81
|
+
startTime?: number;
|
|
82
|
+
endTime?: number;
|
|
83
|
+
coalesceTime?: boolean;
|
|
84
|
+
additionalConditions?: Conditions;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export async function get(metric: string, opts?: GetAnalyticsOpts): Promise<Metric[]> {
|
|
88
|
+
const { getAttributes, startTime, endTime, additionalConditions } = opts ?? {};
|
|
89
|
+
const conditions: Conditions = [{ attribute: 'metric', comparator: 'equals', value: metric }];
|
|
90
|
+
if (additionalConditions) {
|
|
91
|
+
conditions.push(...additionalConditions.map(conformCondition));
|
|
92
|
+
}
|
|
93
|
+
const select = getAttributes ?? [];
|
|
94
|
+
|
|
95
|
+
// ensure we're always selecting id
|
|
96
|
+
if (!isSelected(select, 'id')) {
|
|
97
|
+
select.push('id');
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (startTime && endTime) {
|
|
101
|
+
conditions.push({
|
|
102
|
+
attribute: 'id',
|
|
103
|
+
comparator: 'between',
|
|
104
|
+
value: [startTime, endTime],
|
|
105
|
+
});
|
|
106
|
+
} else {
|
|
107
|
+
if (startTime) {
|
|
108
|
+
conditions.push({
|
|
109
|
+
attribute: 'id',
|
|
110
|
+
comparator: 'greater_than_equal',
|
|
111
|
+
value: startTime,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (endTime) {
|
|
115
|
+
conditions.push({
|
|
116
|
+
attribute: 'id',
|
|
117
|
+
comparator: 'less_than',
|
|
118
|
+
value: endTime,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const request = { conditions, allowConditionsOnDynamicAttributes: true };
|
|
124
|
+
if (select.length > 0) {
|
|
125
|
+
request['select'] = select;
|
|
126
|
+
}
|
|
127
|
+
log.trace?.('get_analytics hdb_analytics.search request:', JSON.stringify(request));
|
|
128
|
+
const searchResults = await databases.system.hdb_analytics.search(request);
|
|
129
|
+
|
|
130
|
+
let results = searchResults.map(async (result: Metric) => {
|
|
131
|
+
// remove nodeId from 'id' attr and resolve it to the actual hostname and
|
|
132
|
+
// add back in as 'node' attr if selected
|
|
133
|
+
const nodeId = result.id[1];
|
|
134
|
+
result['id'] = result['id'][0];
|
|
135
|
+
if (isSelected(select, 'node')) {
|
|
136
|
+
log.trace?.(`get_analytics lookup hostname for nodeId: ${nodeId}`);
|
|
137
|
+
const hostname = await lookupHostname(nodeId);
|
|
138
|
+
result['node'] = hostname ?? nodeId;
|
|
139
|
+
}
|
|
140
|
+
log.trace?.(`get_analytics result:`, JSON.stringify(result));
|
|
141
|
+
return result;
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
if (opts?.coalesceTime) {
|
|
145
|
+
// coalescing window is the aggregate period converted to milliseconds
|
|
146
|
+
const window = envGet(CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD) * 1000;
|
|
147
|
+
results = coalesceResults(results, window);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return results;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
type MetricType = 'builtin' | 'custom';
|
|
154
|
+
|
|
155
|
+
interface ListMetricsRequest {
|
|
156
|
+
metric_types: MetricType[];
|
|
157
|
+
custom_metrics_window?: number;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
type ListMetricsResponse = string[];
|
|
161
|
+
|
|
162
|
+
export function listMetricsOp(req: ListMetricsRequest): Promise<ListMetricsResponse> {
|
|
163
|
+
return listMetrics(req.metric_types, req.custom_metrics_window);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export async function listMetrics(
|
|
167
|
+
metricTypes: MetricType[] = ['builtin'],
|
|
168
|
+
customWindow: number = defaultCustomMetricWindow
|
|
169
|
+
): Promise<string[]> {
|
|
170
|
+
let metrics: string[] = [];
|
|
171
|
+
|
|
172
|
+
const builtins: BuiltInMetricName[] = Object.values(METRIC);
|
|
173
|
+
|
|
174
|
+
if (metricTypes.includes('builtin')) {
|
|
175
|
+
metrics = builtins;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (metricTypes.includes('custom')) {
|
|
179
|
+
const oldestCustomId = Date.now() - customWindow;
|
|
180
|
+
const conditions: Conditions = [
|
|
181
|
+
{
|
|
182
|
+
attribute: 'id',
|
|
183
|
+
comparator: 'greater_than',
|
|
184
|
+
value: oldestCustomId,
|
|
185
|
+
},
|
|
186
|
+
];
|
|
187
|
+
const metricConditions = builtins.map((c) => {
|
|
188
|
+
return {
|
|
189
|
+
attribute: 'metric',
|
|
190
|
+
comparator: 'not_equal',
|
|
191
|
+
value: c,
|
|
192
|
+
} as Condition;
|
|
193
|
+
});
|
|
194
|
+
conditions.push(...metricConditions);
|
|
195
|
+
const customMetricsSearch = {
|
|
196
|
+
select: ['metric'],
|
|
197
|
+
conditions: conditions,
|
|
198
|
+
};
|
|
199
|
+
const customMetrics = new Set<string>();
|
|
200
|
+
const searchResults = await databases.system.hdb_analytics.search(customMetricsSearch);
|
|
201
|
+
for await (const record of searchResults) {
|
|
202
|
+
customMetrics.add(record.metric);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
metrics.push(...Array.from(customMetrics.values()));
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return metrics;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
interface DescribeMetricRequest {
|
|
212
|
+
metric: string;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
interface MetricDescription {
|
|
216
|
+
name: string;
|
|
217
|
+
type: string;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
interface DescribeMetricResponse {
|
|
221
|
+
attributes?: MetricDescription[];
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export function describeMetricOp(req: DescribeMetricRequest): Promise<DescribeMetricResponse> {
|
|
225
|
+
return describeMetric(req.metric);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export async function describeMetric(metric: string): Promise<DescribeMetricResponse> {
|
|
229
|
+
const lastEntrySearch = {
|
|
230
|
+
conditions: [{ attribute: 'metric', comparator: 'equals', value: metric }],
|
|
231
|
+
sort: {
|
|
232
|
+
attribute: 'id',
|
|
233
|
+
descending: true,
|
|
234
|
+
},
|
|
235
|
+
limit: 1,
|
|
236
|
+
};
|
|
237
|
+
const results = databases.system.hdb_analytics.search(lastEntrySearch);
|
|
238
|
+
// node is a synthetic attribute, so make sure it's included
|
|
239
|
+
const attributes = [{ name: 'node', type: 'string' }];
|
|
240
|
+
for await (const result of results) {
|
|
241
|
+
for (const attr in result) {
|
|
242
|
+
attributes.push({ name: attr, type: typeof result[attr] });
|
|
243
|
+
}
|
|
244
|
+
const desc = {
|
|
245
|
+
attributes,
|
|
246
|
+
};
|
|
247
|
+
log.trace?.('describe_metric result:', JSON.stringify(desc));
|
|
248
|
+
return desc;
|
|
249
|
+
}
|
|
250
|
+
// if no results, return empty object
|
|
251
|
+
return {};
|
|
252
|
+
}
|