@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,148 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const terms = require('../../utility/hdbTerms.ts');
|
|
4
|
+
const hdbUtil = require('../../utility/common_utils.js');
|
|
5
|
+
const harperLogger = require('../../utility/logging/harper_logger.js');
|
|
6
|
+
const { handleHDBError, hdbErrors } = require('../../utility/errors/hdbError.js');
|
|
7
|
+
const { isMainThread } = require('worker_threads');
|
|
8
|
+
const { Readable } = require('stream');
|
|
9
|
+
|
|
10
|
+
const os = require('os');
|
|
11
|
+
const util = require('util');
|
|
12
|
+
|
|
13
|
+
const auth = require('../../security/fastifyAuth.js');
|
|
14
|
+
const pAuthorize = util.promisify(auth.authorize);
|
|
15
|
+
const serverUtilities = require('./serverUtilities.ts');
|
|
16
|
+
const { applyImpersonation } = require('../../security/impersonation.ts');
|
|
17
|
+
const { createGzip, constants } = require('zlib');
|
|
18
|
+
|
|
19
|
+
const NO_AUTH_OPERATIONS = [
|
|
20
|
+
terms.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,
|
|
21
|
+
terms.OPERATIONS_ENUM.LOGIN,
|
|
22
|
+
terms.OPERATIONS_ENUM.LOGOUT,
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
function handleServerUncaughtException(err) {
|
|
26
|
+
let message = `Found an uncaught exception with message: ${err.message}. ${os.EOL}Stack: ${err.stack} ${
|
|
27
|
+
os.EOL
|
|
28
|
+
}Terminating ${isMainThread ? 'HDB' : 'thread'}.`;
|
|
29
|
+
console.error(message);
|
|
30
|
+
harperLogger.fatal(message);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function serverErrorHandler(error, req, resp) {
|
|
35
|
+
harperLogger[error.logLevel || 'info'](error);
|
|
36
|
+
if (error.statusCode) {
|
|
37
|
+
if (typeof error.http_resp_msg !== 'object') {
|
|
38
|
+
return resp.code(error.statusCode).send({ error: error.http_resp_msg || error.message });
|
|
39
|
+
}
|
|
40
|
+
return resp.code(error.statusCode).send(error.http_resp_msg);
|
|
41
|
+
}
|
|
42
|
+
const statusCode = error.statusCode ? error.statusCode : hdbErrors.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;
|
|
43
|
+
if (typeof error === 'string') {
|
|
44
|
+
return resp.code(statusCode).send({ error: error });
|
|
45
|
+
}
|
|
46
|
+
return resp.code(statusCode).send(error.message ? { error: error.message } : error);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function reqBodyValidationHandler(req, resp, done) {
|
|
50
|
+
if (!req.body || Object.keys(req.body).length === 0 || typeof req.body !== 'object') {
|
|
51
|
+
const validationErr = handleHDBError(new Error(), 'Invalid JSON.', hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST);
|
|
52
|
+
done(validationErr, null);
|
|
53
|
+
}
|
|
54
|
+
if (hdbUtil.isEmpty(req.body.operation)) {
|
|
55
|
+
const validationErr = handleHDBError(
|
|
56
|
+
new Error(),
|
|
57
|
+
"Request body must include an 'operation' property.",
|
|
58
|
+
hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST
|
|
59
|
+
);
|
|
60
|
+
done(validationErr, null);
|
|
61
|
+
}
|
|
62
|
+
done();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function authHandler(req, resp, done) {
|
|
66
|
+
let user;
|
|
67
|
+
|
|
68
|
+
const isAuthOperation = !NO_AUTH_OPERATIONS.includes(req.body.operation);
|
|
69
|
+
if (
|
|
70
|
+
isAuthOperation ||
|
|
71
|
+
// If create token is called without username/password in the body it needs to be authorized
|
|
72
|
+
(req.body.operation === terms.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS &&
|
|
73
|
+
!req.body.username &&
|
|
74
|
+
!req.body.password)
|
|
75
|
+
) {
|
|
76
|
+
pAuthorize(req, resp)
|
|
77
|
+
.then(async (userData) => {
|
|
78
|
+
user = userData;
|
|
79
|
+
req.body.hdb_user = user;
|
|
80
|
+
if (req.body.impersonate) {
|
|
81
|
+
req.body.hdb_user = await applyImpersonation(user, req.body.impersonate);
|
|
82
|
+
delete req.body.impersonate;
|
|
83
|
+
}
|
|
84
|
+
done();
|
|
85
|
+
})
|
|
86
|
+
.catch((err) => {
|
|
87
|
+
err.statusCode = 401;
|
|
88
|
+
harperLogger.debug('Login failed', err);
|
|
89
|
+
done(err, null);
|
|
90
|
+
});
|
|
91
|
+
} else {
|
|
92
|
+
req.body.hdb_user = null;
|
|
93
|
+
req.body.baseRequest = req.raw?.baseRequest;
|
|
94
|
+
req.body.baseResponse = resp.raw?.baseResponse;
|
|
95
|
+
req.body.fastifyResponse = resp;
|
|
96
|
+
done();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function authAndEnsureUserOnRequest(req, resp, done) {
|
|
101
|
+
pAuthorize(req, resp)
|
|
102
|
+
.then((userData) => {
|
|
103
|
+
req.hdb_user = userData;
|
|
104
|
+
done();
|
|
105
|
+
})
|
|
106
|
+
.catch((err) => {
|
|
107
|
+
harperLogger.warn(err);
|
|
108
|
+
harperLogger.warn(`{"ip":"${req.socket?.remoteAddress}", "error":"${err.stack}"`);
|
|
109
|
+
let errMsg = typeof err === 'string' ? { error: err } : { error: err.message };
|
|
110
|
+
done(handleHDBError(err, errMsg, hdbErrors.HTTP_STATUS_CODES.UNAUTHORIZED), null);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async function handlePostRequest(req, res, _bypassAuth = false) {
|
|
115
|
+
let operation_function;
|
|
116
|
+
|
|
117
|
+
try {
|
|
118
|
+
// Just in case someone tries to bypass auth
|
|
119
|
+
if (req.body.bypass_auth) delete req.body.bypass_auth;
|
|
120
|
+
|
|
121
|
+
operation_function = serverUtilities.chooseOperation(req.body);
|
|
122
|
+
let result = await serverUtilities.processLocalTransaction(req, operation_function);
|
|
123
|
+
if (result instanceof Readable && result.headers) {
|
|
124
|
+
for (let [name, value] of result.headers) {
|
|
125
|
+
res.header(name, value);
|
|
126
|
+
}
|
|
127
|
+
// fastify-compress has one job. I don't know why it can't do it. So we compress here to
|
|
128
|
+
// handle the case of returning a stream
|
|
129
|
+
if (req.headers['accept-encoding']?.includes('gzip')) {
|
|
130
|
+
res.header('content-encoding', 'gzip');
|
|
131
|
+
result = result.pipe(createGzip({ level: constants.Z_BEST_SPEED })); // go fast
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
} catch (error) {
|
|
136
|
+
harperLogger.error(error);
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
module.exports = {
|
|
142
|
+
authHandler,
|
|
143
|
+
authAndEnsureUserOnRequest,
|
|
144
|
+
handlePostRequest,
|
|
145
|
+
handleServerUncaughtException,
|
|
146
|
+
serverErrorHandler,
|
|
147
|
+
reqBodyValidationHandler,
|
|
148
|
+
};
|
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
import search from '../../dataLayer/search.js';
|
|
2
|
+
import bulkLoad from '../../dataLayer/bulkLoad.js';
|
|
3
|
+
import schema from '../../dataLayer/schema.js';
|
|
4
|
+
import schemaDescribe from '../../dataLayer/schemaDescribe.js';
|
|
5
|
+
import delete_ from '../../dataLayer/delete.js';
|
|
6
|
+
import readAuditLog from '../../dataLayer/readAuditLog.js';
|
|
7
|
+
import * as user from '../../security/user.ts';
|
|
8
|
+
import role from '../../security/role.js';
|
|
9
|
+
import customFunctionOperations from '../../components/operations.js';
|
|
10
|
+
import harperLogger from '../../utility/logging/harper_logger.js';
|
|
11
|
+
import readLog from '../../utility/logging/readLog.js';
|
|
12
|
+
import export_ from '../../dataLayer/export.js';
|
|
13
|
+
import opAuth from '../../utility/operation_authorization.js';
|
|
14
|
+
import jobs from '../jobs/jobs.js';
|
|
15
|
+
import * as terms from '../../utility/hdbTerms.ts';
|
|
16
|
+
import { hdbErrors, handleHDBError } from '../../utility/errors/hdbError.js';
|
|
17
|
+
const { HTTP_STATUS_CODES } = hdbErrors;
|
|
18
|
+
import restart from '../../bin/restart.js';
|
|
19
|
+
import * as util from 'util';
|
|
20
|
+
import insert from '../../dataLayer/insert.js';
|
|
21
|
+
import globalSchema from '../../utility/globalSchema.js';
|
|
22
|
+
import systemInformation from '../../utility/environment/systemInformation.js';
|
|
23
|
+
import jobRunner from '../jobs/jobRunner.js';
|
|
24
|
+
import * as tokenAuthentication from '../../security/tokenAuthentication.ts';
|
|
25
|
+
import * as auth from '../../security/auth.ts';
|
|
26
|
+
import configUtils from '../../config/configUtils.js';
|
|
27
|
+
import transactionLog from '../../utility/logging/transactionLog.js';
|
|
28
|
+
import npmUtilities from '../../utility/npmUtilities.js';
|
|
29
|
+
import { _assignPackageExport } from '../../globals.js';
|
|
30
|
+
import { transformReq } from '../../utility/common_utils.js';
|
|
31
|
+
import { server } from '../Server.ts';
|
|
32
|
+
const operationLog = harperLogger.loggerWithTag('operation');
|
|
33
|
+
import * as analytics from '../../resources/analytics/read.ts';
|
|
34
|
+
import operationFunctionCaller from '../../utility/OperationFunctionCaller.js';
|
|
35
|
+
import type { OperationRequest, OperationRequestBody } from '../operationsServer.ts';
|
|
36
|
+
import type { Context } from '../../resources/ResourceInterface.ts';
|
|
37
|
+
import * as status from '../status/index.ts';
|
|
38
|
+
import * as regDeprecated from '../../resources/registrationDeprecated.ts';
|
|
39
|
+
|
|
40
|
+
const pSearchSearch = util.promisify(search.search);
|
|
41
|
+
let pEvaluateSql: (sql: string) => Promise<any>;
|
|
42
|
+
function evaluateSQL(command) {
|
|
43
|
+
if (!pEvaluateSql) {
|
|
44
|
+
const sql = require('../../sqlTranslator/index.js');
|
|
45
|
+
pEvaluateSql = util.promisify(sql.evaluateSQL);
|
|
46
|
+
}
|
|
47
|
+
return pEvaluateSql(command);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const GLOBAL_SCHEMA_UPDATE_OPERATIONS_ENUM = {
|
|
51
|
+
[terms.OPERATIONS_ENUM.CREATE_ATTRIBUTE]: true,
|
|
52
|
+
[terms.OPERATIONS_ENUM.CREATE_TABLE]: true,
|
|
53
|
+
[terms.OPERATIONS_ENUM.CREATE_SCHEMA]: true,
|
|
54
|
+
[terms.OPERATIONS_ENUM.DROP_ATTRIBUTE]: true,
|
|
55
|
+
[terms.OPERATIONS_ENUM.DROP_TABLE]: true,
|
|
56
|
+
[terms.OPERATIONS_ENUM.DROP_SCHEMA]: true,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
import { OperationFunctionObject } from './OperationFunctionObject.ts';
|
|
60
|
+
|
|
61
|
+
type ValueOf<T> = T[keyof T];
|
|
62
|
+
export type OperationFunctionName = ValueOf<typeof terms.OPERATIONS_ENUM>;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* This will process a command message on this receiving node rather than sending it to a remote node. NOTE: this function
|
|
66
|
+
* handles the response to the sender.
|
|
67
|
+
*/
|
|
68
|
+
// TODO: Replace Function type with an actual function type (e.g. (): Thingy)
|
|
69
|
+
export async function processLocalTransaction(req: OperationRequest, operationFunction: Function) {
|
|
70
|
+
try {
|
|
71
|
+
if (
|
|
72
|
+
req.body.operation !== 'read_log' &&
|
|
73
|
+
(harperLogger.log_level === terms.LOG_LEVELS.INFO ||
|
|
74
|
+
harperLogger.log_level === terms.LOG_LEVELS.DEBUG ||
|
|
75
|
+
harperLogger.log_level === terms.LOG_LEVELS.TRACE)
|
|
76
|
+
) {
|
|
77
|
+
// Need to remove auth variables, but we don't want to create an object unless
|
|
78
|
+
// the logging is actually going to happen.
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
80
|
+
const { hdb_user, hdbAuthHeader, password, payload, ...cleanBody } = req.body;
|
|
81
|
+
operationLog.info(cleanBody);
|
|
82
|
+
}
|
|
83
|
+
} catch (e) {
|
|
84
|
+
operationLog.error(e);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
let data = await operationFunctionCaller.callOperationFunctionAsAwait(operationFunction, req.body, null);
|
|
88
|
+
|
|
89
|
+
if (typeof data !== 'object') {
|
|
90
|
+
data = { message: data };
|
|
91
|
+
}
|
|
92
|
+
if (data instanceof Error) {
|
|
93
|
+
throw data;
|
|
94
|
+
}
|
|
95
|
+
if (GLOBAL_SCHEMA_UPDATE_OPERATIONS_ENUM[req.body.operation]) {
|
|
96
|
+
globalSchema.setSchemaDataToGlobal((err: Error) => {
|
|
97
|
+
if (err) {
|
|
98
|
+
operationLog.error(err);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return data;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const OPERATION_FUNCTION_MAP = initializeOperationFunctionMap();
|
|
107
|
+
|
|
108
|
+
server.operation = operation;
|
|
109
|
+
export type OperationDefinition = {
|
|
110
|
+
name: string;
|
|
111
|
+
execute: (operation: any) => any | Promise<any>;
|
|
112
|
+
httpMethod?: 'DELETE' | 'GET' | 'HEAD' | 'OPTIONS' | 'PATCH' | 'POST' | 'PUT' | 'TRACE'; // method to use for REST
|
|
113
|
+
isJob?: boolean;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Register an operation function with the server.
|
|
118
|
+
* @param operationDefinition
|
|
119
|
+
*/
|
|
120
|
+
server.registerOperation = (operationDefinition: OperationDefinition) => {
|
|
121
|
+
OPERATION_FUNCTION_MAP.set(operationDefinition.name, new OperationFunctionObject(operationDefinition.execute));
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export function chooseOperation(json: OperationRequestBody) {
|
|
125
|
+
let getOpResult: OperationFunctionObject;
|
|
126
|
+
try {
|
|
127
|
+
getOpResult = getOperationFunction(json);
|
|
128
|
+
} catch (err) {
|
|
129
|
+
operationLog.error(`Error when selecting operation function - ${err}`);
|
|
130
|
+
throw err;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const { operation_function, job_operation_function } = getOpResult;
|
|
134
|
+
|
|
135
|
+
// Here there is a SQL statement in either the operation or the searchOperation (from jobs like export_local). Need to check the perms
|
|
136
|
+
// on all affected tables/attributes.
|
|
137
|
+
try {
|
|
138
|
+
if (json.operation === 'sql' || (json.search_operation && json.search_operation.operation === 'sql')) {
|
|
139
|
+
const sql = require('../../sqlTranslator/index.js');
|
|
140
|
+
const sqlStatement = json.operation === 'sql' ? json.sql : json.search_operation.sql;
|
|
141
|
+
const parsedSqlObject = sql.convertSQLToAST(sqlStatement);
|
|
142
|
+
json.parsed_sql_object = parsedSqlObject;
|
|
143
|
+
if (!json.bypass_auth) {
|
|
144
|
+
const astPermCheck = sql.checkASTPermissions(json, parsedSqlObject);
|
|
145
|
+
if (astPermCheck) {
|
|
146
|
+
operationLog.error(`${HTTP_STATUS_CODES.FORBIDDEN} from operation ${json.operation}`);
|
|
147
|
+
operationLog.warn(`User '${json.hdb_user?.username}' is not permitted to ${json.operation}`);
|
|
148
|
+
throw handleHDBError(
|
|
149
|
+
new Error(),
|
|
150
|
+
astPermCheck,
|
|
151
|
+
hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,
|
|
152
|
+
undefined,
|
|
153
|
+
undefined,
|
|
154
|
+
true
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//we need to bypass permission checks to allow the createAuthorizationTokens
|
|
159
|
+
} else if (
|
|
160
|
+
!json.bypass_auth &&
|
|
161
|
+
json.operation !== terms.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS &&
|
|
162
|
+
json.operation !== terms.OPERATIONS_ENUM.LOGIN &&
|
|
163
|
+
json.operation !== terms.OPERATIONS_ENUM.LOGOUT
|
|
164
|
+
) {
|
|
165
|
+
const functionToCheck = job_operation_function === undefined ? operation_function : job_operation_function;
|
|
166
|
+
const operation_json = json.search_operation ? json.search_operation : json;
|
|
167
|
+
if (!operation_json.hdb_user) {
|
|
168
|
+
operation_json.hdb_user = json.hdb_user;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const verifyPermsResult = opAuth.verifyPerms(operation_json, functionToCheck);
|
|
172
|
+
|
|
173
|
+
if (verifyPermsResult) {
|
|
174
|
+
operationLog.error(`${HTTP_STATUS_CODES.FORBIDDEN} from operation ${json.operation}`);
|
|
175
|
+
operationLog.warn(
|
|
176
|
+
`User '${operation_json.hdb_user?.username}' is not permitted to ${operation_json.operation}`
|
|
177
|
+
);
|
|
178
|
+
throw handleHDBError(
|
|
179
|
+
new Error(),
|
|
180
|
+
verifyPermsResult,
|
|
181
|
+
hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,
|
|
182
|
+
undefined,
|
|
183
|
+
false,
|
|
184
|
+
true
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
} catch (err) {
|
|
189
|
+
throw handleHDBError(err, `There was an error when trying to choose an operation path`);
|
|
190
|
+
}
|
|
191
|
+
return operation_function;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export function getOperationFunction(json: OperationRequestBody): OperationFunctionObject {
|
|
195
|
+
operationLog.trace(`getOperationFunction with operation: ${json.operation}`);
|
|
196
|
+
|
|
197
|
+
if (OPERATION_FUNCTION_MAP.has(json.operation)) {
|
|
198
|
+
return OPERATION_FUNCTION_MAP.get(json.operation);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
throw handleHDBError(
|
|
202
|
+
new Error(),
|
|
203
|
+
hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(json.operation),
|
|
204
|
+
hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,
|
|
205
|
+
undefined,
|
|
206
|
+
undefined,
|
|
207
|
+
true
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
_assignPackageExport('operation', operation);
|
|
212
|
+
/**
|
|
213
|
+
* Standalone function to execute an operation
|
|
214
|
+
*/
|
|
215
|
+
export function operation(operation: OperationRequestBody, context: Context, authorize: boolean) {
|
|
216
|
+
operation.hdb_user = context?.user;
|
|
217
|
+
operation.bypass_auth = !authorize;
|
|
218
|
+
const operation_function = chooseOperation(operation);
|
|
219
|
+
return processLocalTransaction({ body: operation }, operation_function);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
interface Transaction {
|
|
223
|
+
schema: string;
|
|
224
|
+
table: string;
|
|
225
|
+
operation: OperationFunctionName;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
interface TransactionWrapper {
|
|
229
|
+
channel: string;
|
|
230
|
+
transactions: Transaction[];
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
interface CatchupOperationRequest extends OperationRequestBody {
|
|
234
|
+
transaction: TransactionWrapper;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
async function catchup(req: CatchupOperationRequest) {
|
|
238
|
+
operationLog.trace('In serverUtils.catchup');
|
|
239
|
+
const catchupObject = req.transaction;
|
|
240
|
+
const splitChannel = catchupObject.channel.split(':');
|
|
241
|
+
|
|
242
|
+
const _schema = splitChannel[0];
|
|
243
|
+
const table = splitChannel[1];
|
|
244
|
+
for (const transaction of catchupObject.transactions) {
|
|
245
|
+
try {
|
|
246
|
+
transaction.schema = _schema;
|
|
247
|
+
transaction.table = table;
|
|
248
|
+
switch (transaction.operation) {
|
|
249
|
+
case terms.OPERATIONS_ENUM.INSERT:
|
|
250
|
+
await insert.insert(transaction);
|
|
251
|
+
break;
|
|
252
|
+
case terms.OPERATIONS_ENUM.UPDATE:
|
|
253
|
+
await insert.update(transaction);
|
|
254
|
+
break;
|
|
255
|
+
case terms.OPERATIONS_ENUM.UPSERT:
|
|
256
|
+
await insert.upsert(transaction);
|
|
257
|
+
break;
|
|
258
|
+
case terms.OPERATIONS_ENUM.DELETE:
|
|
259
|
+
await delete_.deleteRecord(transaction);
|
|
260
|
+
break;
|
|
261
|
+
default:
|
|
262
|
+
operationLog.warn('invalid operation in catchup');
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
} catch (e) {
|
|
266
|
+
operationLog.info('Invalid operation in transaction');
|
|
267
|
+
operationLog.error(e);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
interface JobResult {
|
|
273
|
+
message: string;
|
|
274
|
+
job_id: string;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export async function executeJob(json: OperationRequestBody): Promise<JobResult> {
|
|
278
|
+
transformReq(json);
|
|
279
|
+
|
|
280
|
+
let newJobObject;
|
|
281
|
+
let result;
|
|
282
|
+
try {
|
|
283
|
+
result = await jobs.addJob(json);
|
|
284
|
+
if (result) {
|
|
285
|
+
newJobObject = result.createdJob;
|
|
286
|
+
operationLog.info('addJob result', result);
|
|
287
|
+
const jobRunnerMessage = new jobRunner.RunnerMessage(newJobObject, json);
|
|
288
|
+
const returnMessage = await jobRunner.parseMessage(jobRunnerMessage);
|
|
289
|
+
|
|
290
|
+
return {
|
|
291
|
+
message: returnMessage ?? `Starting job with id ${newJobObject.id}`,
|
|
292
|
+
job_id: newJobObject.id,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
} catch (err) {
|
|
296
|
+
const error = err instanceof Error ? err : null;
|
|
297
|
+
const message = `There was an error executing job: ${error && 'http_resp_msg' in error ? error.http_resp_msg : err}`;
|
|
298
|
+
operationLog.error(message);
|
|
299
|
+
throw handleHDBError(err, message);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
function initializeOperationFunctionMap(): Map<OperationFunctionName, OperationFunctionObject> {
|
|
304
|
+
const opFuncMap = new Map<OperationFunctionName, OperationFunctionObject>();
|
|
305
|
+
|
|
306
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.INSERT, new OperationFunctionObject(insert.insert));
|
|
307
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.UPDATE, new OperationFunctionObject(insert.update));
|
|
308
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.UPSERT, new OperationFunctionObject(insert.upsert));
|
|
309
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS, new OperationFunctionObject(search.searchByConditions));
|
|
310
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.SEARCH_BY_HASH, new OperationFunctionObject(search.searchByHash));
|
|
311
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.SEARCH_BY_ID, new OperationFunctionObject(search.searchByHash));
|
|
312
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.SEARCH_BY_VALUE, new OperationFunctionObject(search.searchByValue));
|
|
313
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.SEARCH, new OperationFunctionObject(pSearchSearch));
|
|
314
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.SQL, new OperationFunctionObject(evaluateSQL));
|
|
315
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CSV_DATA_LOAD, new OperationFunctionObject(executeJob, bulkLoad.csvDataLoad));
|
|
316
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CSV_FILE_LOAD, new OperationFunctionObject(executeJob, bulkLoad.csvFileLoad));
|
|
317
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CSV_URL_LOAD, new OperationFunctionObject(executeJob, bulkLoad.csvURLLoad));
|
|
318
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.IMPORT_FROM_S3, new OperationFunctionObject(executeJob, bulkLoad.importFromS3));
|
|
319
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CREATE_SCHEMA, new OperationFunctionObject(schema.createSchema));
|
|
320
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CREATE_DATABASE, new OperationFunctionObject(schema.createSchema));
|
|
321
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CREATE_TABLE, new OperationFunctionObject(schema.createTable));
|
|
322
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CREATE_ATTRIBUTE, new OperationFunctionObject(schema.createAttribute));
|
|
323
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DROP_SCHEMA, new OperationFunctionObject(schema.dropSchema));
|
|
324
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DROP_DATABASE, new OperationFunctionObject(schema.dropSchema));
|
|
325
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DROP_TABLE, new OperationFunctionObject(schema.dropTable));
|
|
326
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DROP_ATTRIBUTE, new OperationFunctionObject(schema.dropAttribute));
|
|
327
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DESCRIBE_SCHEMA, new OperationFunctionObject(schemaDescribe.describeSchema));
|
|
328
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DESCRIBE_DATABASE, new OperationFunctionObject(schemaDescribe.describeSchema));
|
|
329
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DESCRIBE_TABLE, new OperationFunctionObject(schemaDescribe.describeTable));
|
|
330
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DESCRIBE_ALL, new OperationFunctionObject(schemaDescribe.describeAll));
|
|
331
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DELETE, new OperationFunctionObject(delete_.deleteRecord));
|
|
332
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.ADD_USER, new OperationFunctionObject(user.addUser));
|
|
333
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.ALTER_USER, new OperationFunctionObject(user.alterUser));
|
|
334
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DROP_USER, new OperationFunctionObject(user.dropUser));
|
|
335
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.LIST_USERS, new OperationFunctionObject(user.listUsersExternal));
|
|
336
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.LIST_ROLES, new OperationFunctionObject(role.listRoles));
|
|
337
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.ADD_ROLE, new OperationFunctionObject(role.addRole));
|
|
338
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.ALTER_ROLE, new OperationFunctionObject(role.alterRole));
|
|
339
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DROP_ROLE, new OperationFunctionObject(role.dropRole));
|
|
340
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.USER_INFO, new OperationFunctionObject(user.userInfo));
|
|
341
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.READ_LOG, new OperationFunctionObject(readLog));
|
|
342
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.SET_CONFIGURATION, new OperationFunctionObject(configUtils.setConfiguration));
|
|
343
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.EXPORT_TO_S3, new OperationFunctionObject(executeJob, export_.export_to_s3));
|
|
344
|
+
|
|
345
|
+
opFuncMap.set(
|
|
346
|
+
terms.OPERATIONS_ENUM.DELETE_FILES_BEFORE,
|
|
347
|
+
new OperationFunctionObject(executeJob, delete_.deleteFilesBefore)
|
|
348
|
+
);
|
|
349
|
+
opFuncMap.set(
|
|
350
|
+
terms.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,
|
|
351
|
+
new OperationFunctionObject(executeJob, delete_.deleteFilesBefore)
|
|
352
|
+
);
|
|
353
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.EXPORT_LOCAL, new OperationFunctionObject(executeJob, export_.export_local));
|
|
354
|
+
opFuncMap.set(
|
|
355
|
+
terms.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,
|
|
356
|
+
new OperationFunctionObject(jobs.handleGetJobsByStartDate)
|
|
357
|
+
);
|
|
358
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.GET_JOB, new OperationFunctionObject(jobs.handleGetJob));
|
|
359
|
+
opFuncMap.set(
|
|
360
|
+
terms.OPERATIONS_ENUM.REGISTRATION_INFO,
|
|
361
|
+
new OperationFunctionObject(regDeprecated.getRegistrationInfo)
|
|
362
|
+
);
|
|
363
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.RESTART, new OperationFunctionObject(restart.restart));
|
|
364
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.RESTART_SERVICE, new OperationFunctionObject(executeJob, restart.restartService));
|
|
365
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CATCHUP, new OperationFunctionObject(catchup));
|
|
366
|
+
opFuncMap.set(
|
|
367
|
+
terms.OPERATIONS_ENUM.SYSTEM_INFORMATION,
|
|
368
|
+
new OperationFunctionObject(systemInformation.systemInformation)
|
|
369
|
+
);
|
|
370
|
+
opFuncMap.set(
|
|
371
|
+
terms.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,
|
|
372
|
+
new OperationFunctionObject(executeJob, delete_.deleteAuditLogsBefore)
|
|
373
|
+
);
|
|
374
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.READ_AUDIT_LOG, new OperationFunctionObject(readAuditLog));
|
|
375
|
+
opFuncMap.set(
|
|
376
|
+
terms.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,
|
|
377
|
+
new OperationFunctionObject(tokenAuthentication.createTokens)
|
|
378
|
+
);
|
|
379
|
+
opFuncMap.set(
|
|
380
|
+
terms.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,
|
|
381
|
+
new OperationFunctionObject(tokenAuthentication.refreshOperationToken)
|
|
382
|
+
);
|
|
383
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.LOGIN, new OperationFunctionObject(auth.login));
|
|
384
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.LOGOUT, new OperationFunctionObject(auth.logout));
|
|
385
|
+
|
|
386
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.GET_CONFIGURATION, new OperationFunctionObject(configUtils.getConfiguration));
|
|
387
|
+
opFuncMap.set(
|
|
388
|
+
terms.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,
|
|
389
|
+
new OperationFunctionObject(customFunctionOperations.customFunctionsStatus)
|
|
390
|
+
);
|
|
391
|
+
opFuncMap.set(
|
|
392
|
+
terms.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,
|
|
393
|
+
new OperationFunctionObject(customFunctionOperations.getCustomFunctions)
|
|
394
|
+
);
|
|
395
|
+
opFuncMap.set(
|
|
396
|
+
terms.OPERATIONS_ENUM.GET_COMPONENT_FILE,
|
|
397
|
+
new OperationFunctionObject(customFunctionOperations.getComponentFile)
|
|
398
|
+
);
|
|
399
|
+
opFuncMap.set(
|
|
400
|
+
terms.OPERATIONS_ENUM.GET_COMPONENTS,
|
|
401
|
+
new OperationFunctionObject(customFunctionOperations.getComponents)
|
|
402
|
+
);
|
|
403
|
+
opFuncMap.set(
|
|
404
|
+
terms.OPERATIONS_ENUM.SET_COMPONENT_FILE,
|
|
405
|
+
new OperationFunctionObject(customFunctionOperations.setComponentFile)
|
|
406
|
+
);
|
|
407
|
+
opFuncMap.set(
|
|
408
|
+
terms.OPERATIONS_ENUM.DROP_COMPONENT,
|
|
409
|
+
new OperationFunctionObject(customFunctionOperations.dropComponent)
|
|
410
|
+
);
|
|
411
|
+
opFuncMap.set(
|
|
412
|
+
terms.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,
|
|
413
|
+
new OperationFunctionObject(customFunctionOperations.getCustomFunction)
|
|
414
|
+
);
|
|
415
|
+
opFuncMap.set(
|
|
416
|
+
terms.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,
|
|
417
|
+
new OperationFunctionObject(customFunctionOperations.setCustomFunction)
|
|
418
|
+
);
|
|
419
|
+
opFuncMap.set(
|
|
420
|
+
terms.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,
|
|
421
|
+
new OperationFunctionObject(customFunctionOperations.dropCustomFunction)
|
|
422
|
+
);
|
|
423
|
+
opFuncMap.set(
|
|
424
|
+
terms.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,
|
|
425
|
+
new OperationFunctionObject(customFunctionOperations.addComponent)
|
|
426
|
+
);
|
|
427
|
+
opFuncMap.set(
|
|
428
|
+
terms.OPERATIONS_ENUM.ADD_COMPONENT,
|
|
429
|
+
new OperationFunctionObject(customFunctionOperations.addComponent)
|
|
430
|
+
);
|
|
431
|
+
opFuncMap.set(
|
|
432
|
+
terms.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,
|
|
433
|
+
new OperationFunctionObject(customFunctionOperations.dropCustomFunctionProject)
|
|
434
|
+
);
|
|
435
|
+
opFuncMap.set(
|
|
436
|
+
terms.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,
|
|
437
|
+
new OperationFunctionObject(customFunctionOperations.packageComponent)
|
|
438
|
+
);
|
|
439
|
+
opFuncMap.set(
|
|
440
|
+
terms.OPERATIONS_ENUM.PACKAGE_COMPONENT,
|
|
441
|
+
new OperationFunctionObject(customFunctionOperations.packageComponent)
|
|
442
|
+
);
|
|
443
|
+
opFuncMap.set(
|
|
444
|
+
terms.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,
|
|
445
|
+
new OperationFunctionObject(customFunctionOperations.deployComponent)
|
|
446
|
+
);
|
|
447
|
+
opFuncMap.set(
|
|
448
|
+
terms.OPERATIONS_ENUM.DEPLOY_COMPONENT,
|
|
449
|
+
new OperationFunctionObject(customFunctionOperations.deployComponent)
|
|
450
|
+
);
|
|
451
|
+
opFuncMap.set(
|
|
452
|
+
terms.OPERATIONS_ENUM.READ_TRANSACTION_LOG,
|
|
453
|
+
new OperationFunctionObject(transactionLog.readTransactionLog)
|
|
454
|
+
);
|
|
455
|
+
opFuncMap.set(
|
|
456
|
+
terms.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,
|
|
457
|
+
new OperationFunctionObject(executeJob, transactionLog.deleteTransactionLogsBefore)
|
|
458
|
+
);
|
|
459
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.INSTALL_NODE_MODULES, new OperationFunctionObject(npmUtilities.installModules));
|
|
460
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.GET_BACKUP, new OperationFunctionObject(schema.getBackup));
|
|
461
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CLEANUP_ORPHAN_BLOBS, new OperationFunctionObject(schema.cleanupOrphanBlobs));
|
|
462
|
+
|
|
463
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.GET_ANALYTICS, new OperationFunctionObject(analytics.getOp));
|
|
464
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.LIST_METRICS, new OperationFunctionObject(analytics.listMetricsOp));
|
|
465
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.DESCRIBE_METRIC, new OperationFunctionObject(analytics.describeMetricOp));
|
|
466
|
+
|
|
467
|
+
// set status operations
|
|
468
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.GET_STATUS, new OperationFunctionObject(status.get));
|
|
469
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.SET_STATUS, new OperationFunctionObject(status.set));
|
|
470
|
+
opFuncMap.set(terms.OPERATIONS_ENUM.CLEAR_STATUS, new OperationFunctionObject(status.clear));
|
|
471
|
+
|
|
472
|
+
return opFuncMap;
|
|
473
|
+
}
|