@harperfast/harper-pro 5.0.30 → 5.1.0-beta.2
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/analytics/profile.ts +4 -0
- package/core/AGENTS.md +94 -6
- package/core/DESIGN.md +36 -0
- package/core/README.md +11 -10
- package/core/agent/agent.ts +203 -0
- package/core/agent/loop.ts +205 -0
- package/core/agent/operations.ts +148 -0
- package/core/agent/session.ts +187 -0
- package/core/agent/tools/fsTools.ts +276 -0
- package/core/agent/tools/httpFetchTool.ts +112 -0
- package/core/agent/tools/scheduleTool.ts +68 -0
- package/core/agent/toolset.ts +43 -0
- package/core/agent/types.ts +85 -0
- package/core/benchmarks/hnsw-search.js +157 -0
- package/core/benchmarks/ycsb/README.md +144 -0
- package/core/benchmarks/ycsb/analyze-profile.mts +120 -0
- package/core/benchmarks/ycsb/app/config.yaml +3 -0
- package/core/benchmarks/ycsb/app/schema.graphql +17 -0
- package/core/benchmarks/ycsb/harness.mts +328 -0
- package/core/benchmarks/ycsb/restClient.mts +120 -0
- package/core/benchmarks/ycsb/run-single-node.mts +97 -0
- package/core/benchmarks/ycsb/to-benchmark-json.mts +58 -0
- package/core/benchmarks/ycsb/workload.mts +499 -0
- package/core/benchmarks/ycsb/workload.test.mts +174 -0
- package/core/bin/{BinObjects.js → BinObjects.ts} +4 -5
- package/core/bin/cliCredentials.ts +133 -0
- package/core/bin/cliOperations.ts +339 -0
- package/core/bin/copyDb.ts +10 -10
- package/core/bin/deployRenderer.ts +196 -0
- package/core/bin/{harper.js → harper.ts} +48 -24
- package/core/bin/{install.js → install.ts} +3 -3
- package/core/bin/lite.ts +2 -0
- package/core/bin/login.ts +134 -0
- package/core/bin/logout.ts +11 -0
- package/core/bin/mcp/client.ts +407 -0
- package/core/bin/mcp/doctor.ts +189 -0
- package/core/bin/mcp/index.ts +80 -0
- package/core/bin/mcp/options.ts +122 -0
- package/core/bin/mcp/printConfig.ts +89 -0
- package/core/bin/multipartBuilder.ts +74 -0
- package/core/bin/{restart.js → restart.ts} +31 -32
- package/core/bin/{run.js → run.ts} +57 -46
- package/core/bin/sseConsumer.ts +126 -0
- package/core/bin/{status.js → status.ts} +10 -10
- package/core/bin/stop.ts +21 -0
- package/core/bin/upgrade.js +17 -24
- package/core/components/Application.ts +144 -18
- package/core/components/ApplicationScope.ts +2 -2
- package/core/components/ComponentV1.ts +2 -2
- package/core/components/EntryHandler.ts +159 -9
- package/core/components/OptionsWatcher.ts +75 -11
- package/core/components/Scope.ts +132 -18
- package/core/components/anthropic/index.ts +547 -0
- package/core/components/bedrock/index.ts +823 -0
- package/core/components/componentLoader.ts +64 -32
- package/core/components/deployLifecycle.ts +161 -0
- package/core/components/deploymentOperations.ts +173 -0
- package/core/components/deploymentRecorder.ts +427 -0
- package/core/components/deriveURLPath.ts +4 -4
- package/core/components/mcp/adapters/fastify.ts +87 -0
- package/core/components/mcp/adapters/harperHttp.ts +103 -0
- package/core/components/mcp/audit.ts +75 -0
- package/core/components/mcp/index.ts +134 -0
- package/core/components/mcp/jsonrpc.ts +134 -0
- package/core/components/mcp/lifecycle.ts +105 -0
- package/core/components/mcp/listChanged.ts +270 -0
- package/core/components/mcp/rateLimit.ts +217 -0
- package/core/components/mcp/resources.ts +607 -0
- package/core/components/mcp/session.ts +151 -0
- package/core/components/mcp/sessionRegistry.ts +140 -0
- package/core/components/mcp/toolRegistry.ts +294 -0
- package/core/components/mcp/tools/application.ts +761 -0
- package/core/components/mcp/tools/operations.ts +311 -0
- package/core/components/mcp/tools/schemas/derive.ts +356 -0
- package/core/components/mcp/tools/schemas/operationDescriptions.ts +241 -0
- package/core/components/mcp/tools/schemas/operations.ts +301 -0
- package/core/components/mcp/transport.ts +517 -0
- package/core/components/ollama/index.ts +316 -0
- package/core/components/openai/index.ts +563 -0
- package/core/components/operations.js +217 -60
- package/core/components/operationsValidation.js +12 -4
- package/core/components/packageComponent.ts +97 -29
- package/core/components/requestRestart.ts +17 -2
- package/core/components/status/crossThread.ts +14 -5
- package/core/components/status/errors.ts +1 -1
- package/core/config/RootConfigWatcher.ts +56 -2
- package/core/config/configUtils.js +29 -8
- package/core/config/harperConfigEnvVars.ts +1 -1
- package/core/dataLayer/{CreateAttributeObject.js → CreateAttributeObject.ts} +4 -3
- package/core/dataLayer/{CreateTableObject.js → CreateTableObject.ts} +2 -1
- package/core/dataLayer/{DataLayerObjects.js → DataLayerObjects.ts} +17 -9
- package/core/dataLayer/{DeleteBeforeObject.js → DeleteBeforeObject.ts} +2 -1
- package/core/dataLayer/{DeleteObject.js → DeleteObject.ts} +3 -2
- package/core/dataLayer/{DropAttributeObject.js → DropAttributeObject.ts} +2 -1
- package/core/dataLayer/{GetBackupObject.js → GetBackupObject.ts} +3 -2
- package/core/dataLayer/{InsertObject.js → InsertObject.ts} +3 -2
- package/core/dataLayer/{ReadAuditLogObject.js → ReadAuditLogObject.ts} +3 -2
- package/core/dataLayer/{SQLSearch.js → SQLSearch.ts} +97 -43
- package/core/dataLayer/{SearchByConditionsObject.js → SearchByConditionsObject.ts} +5 -6
- package/core/dataLayer/{SearchByHashObject.js → SearchByHashObject.ts} +2 -1
- package/core/dataLayer/{SearchObject.js → SearchObject.ts} +2 -1
- package/core/dataLayer/{SqlSearchObject.js → SqlSearchObject.ts} +2 -1
- package/core/dataLayer/{UpdateObject.js → UpdateObject.ts} +3 -2
- package/core/dataLayer/{UpsertObject.js → UpsertObject.ts} +3 -2
- package/core/dataLayer/{bulkLoad.js → bulkLoad.ts} +40 -49
- package/core/dataLayer/{delete.js → delete.ts} +21 -26
- package/core/dataLayer/{export.js → export.ts} +22 -26
- package/core/dataLayer/{getBackup.js → getBackup.ts} +7 -9
- package/core/dataLayer/harperBridge/BridgeMethods.ts +102 -0
- package/core/dataLayer/harperBridge/ResourceBridge.ts +27 -26
- package/core/dataLayer/harperBridge/TableSizeObject.ts +1 -0
- package/core/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +4 -4
- package/core/dataLayer/harperBridge/{harperBridge.js → harperBridge.ts} +3 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +8 -6
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +4 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +6 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +5 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +4 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +6 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +5 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +5 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +3 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +3 -2
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +5 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +10 -8
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +4 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +3 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +6 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +2 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +3 -2
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +2 -2
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +5 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +6 -3
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.ts +1 -1
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +4 -4
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +5 -5
- package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +4 -4
- package/core/dataLayer/{hdbInfoController.js → hdbInfoController.ts} +20 -26
- package/core/dataLayer/{insert.js → insert.ts} +24 -24
- package/core/dataLayer/{readAuditLog.js → readAuditLog.ts} +8 -10
- package/core/dataLayer/{schema.js → schema.ts} +32 -44
- package/core/dataLayer/{schemaDescribe.js → schemaDescribe.ts} +23 -26
- package/core/dataLayer/{search.js → search.ts} +9 -15
- package/core/dataLayer/{transaction.js → transaction.ts} +2 -5
- package/core/dataLayer/{update.js → update.ts} +19 -22
- package/core/index.ts +5 -0
- package/core/json/systemSchema.json +65 -0
- package/core/launchServiceScripts/utility/checkNodeVersion.js +2 -0
- package/core/package-lock.json +9087 -4345
- package/core/resources/DESIGN.md +98 -0
- package/core/resources/DatabaseTransaction.ts +58 -30
- package/core/resources/ErrorResource.ts +2 -1
- package/core/resources/LMDBTransaction.ts +38 -29
- package/core/resources/RecordEncoder.ts +41 -39
- package/core/resources/RequestTarget.ts +2 -0
- package/core/resources/Resource.ts +96 -56
- package/core/resources/ResourceInterface.ts +44 -21
- package/core/resources/Resources.ts +8 -8
- package/core/resources/RocksIndexStore.ts +3 -0
- package/core/resources/RocksTransactionLogStore.ts +13 -4
- package/core/resources/Table.ts +440 -223
- package/core/resources/analytics/metadata.ts +1 -0
- package/core/resources/analytics/read.ts +99 -10
- package/core/resources/analytics/write.ts +240 -17
- package/core/resources/auditStore.ts +30 -19
- package/core/resources/blob.ts +53 -53
- package/core/resources/dataLoader.ts +4 -4
- package/core/resources/databases.ts +208 -74
- package/core/resources/graphql.ts +267 -165
- package/core/resources/indexes/HierarchicalNavigableSmallWorld.ts +310 -65
- package/core/resources/indexes/vector.ts +17 -0
- package/core/resources/jsonSchemaTypes.ts +102 -0
- package/core/resources/loadEnv.ts +21 -17
- package/core/resources/login.ts +5 -3
- package/core/resources/models/Models.ts +304 -0
- package/core/resources/models/TestBackend.ts +83 -0
- package/core/resources/models/agentLoop.ts +895 -0
- package/core/resources/models/analyticsTable.ts +199 -0
- package/core/resources/models/backendHelpers.ts +116 -0
- package/core/resources/models/backendRegistry.ts +66 -0
- package/core/resources/models/bootstrap.ts +135 -0
- package/core/resources/models/embedHook.ts +138 -0
- package/core/resources/models/types.ts +296 -0
- package/core/resources/openApi.ts +65 -31
- package/core/resources/replayLogs.ts +20 -9
- package/core/resources/replayLogsGuards.ts +45 -0
- package/core/resources/roles.ts +62 -67
- package/core/resources/search.ts +355 -135
- package/core/resources/tracked.ts +18 -9
- package/core/resources/transaction.ts +8 -8
- package/core/resources/transactionBroadcast.ts +3 -3
- package/core/security/auth.ts +35 -26
- package/core/security/certificateVerification/crlVerification.ts +11 -4
- package/core/security/{cryptoHash.js → cryptoHash.ts} +3 -8
- package/core/security/data_objects/{PermissionAttributeResponseObject.js → PermissionAttributeResponseObject.ts} +4 -4
- package/core/security/data_objects/{PermissionResponseObject.js → PermissionResponseObject.ts} +12 -11
- package/core/security/data_objects/{PermissionTableResponseObject.js → PermissionTableResponseObject.ts} +6 -4
- package/core/security/{fastifyAuth.js → fastifyAuth.ts} +93 -20
- package/core/security/impersonation.ts +3 -3
- package/core/security/jsLoader.ts +22 -8
- package/core/security/{keys.js → keys.ts} +113 -121
- package/core/security/permissionsTranslator.js +2 -2
- package/core/security/{role.js → role.ts} +26 -33
- package/core/security/tokenAuthentication.ts +34 -7
- package/core/security/user.ts +26 -22
- package/core/server/DESIGN.md +139 -0
- package/core/server/DurableSubscriptionsSession.ts +67 -50
- package/core/server/REST.ts +120 -107
- package/core/server/Server.ts +31 -12
- package/core/server/fastifyRoutes/helpers/getCORSOptions.js +1 -1
- package/core/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +1 -1
- package/core/server/fastifyRoutes/helpers/getServerOptions.js +1 -1
- package/core/server/fastifyRoutes.ts +37 -33
- package/core/server/graphqlQuerying.ts +6 -5
- package/core/server/http.ts +517 -26
- package/core/server/itc/serverHandlers.js +75 -14
- package/core/server/jobs/{JobObject.js → JobObject.ts} +13 -6
- package/core/server/jobs/{jobProcess.js → jobProcess.ts} +20 -16
- package/core/server/jobs/{jobRunner.js → jobRunner.ts} +20 -21
- package/core/server/jobs/{jobs.js → jobs.ts} +41 -44
- package/core/server/loadRootComponents.js +1 -1
- package/core/server/middlewareChain.ts +270 -0
- package/core/server/mqtt.ts +35 -26
- package/core/server/nodeName.ts +3 -1
- package/core/server/operationsServer.ts +85 -10
- package/core/server/serverHelpers/Headers.ts +10 -8
- package/core/server/serverHelpers/JSONStream.ts +15 -5
- package/core/server/serverHelpers/Request.ts +370 -13
- package/core/server/serverHelpers/contentTypes.ts +42 -11
- package/core/server/serverHelpers/multipartParser.ts +152 -0
- package/core/server/serverHelpers/progressEmitter.ts +110 -0
- package/core/server/serverHelpers/serverHandlers.js +43 -7
- package/core/server/serverHelpers/serverUtilities.ts +40 -30
- package/core/server/static.ts +9 -6
- package/core/server/status/index.ts +2 -2
- package/core/server/storageReclamation.ts +39 -2
- package/core/server/threads/itc.js +7 -4
- package/core/server/threads/manageThreads.js +100 -26
- package/core/server/threads/socketRouter.ts +12 -275
- package/core/server/threads/threadServer.js +345 -105
- package/core/server/threads/workerProcessGuard.ts +93 -0
- package/core/server/throttle.ts +18 -0
- package/core/sqlTranslator/{SelectValidator.js → SelectValidator.ts} +41 -49
- package/core/sqlTranslator/{alasqlFunctionImporter.js → alasqlFunctionImporter.ts} +5 -5
- package/core/sqlTranslator/{deleteTranslator.js → deleteTranslator.ts} +13 -18
- package/core/sqlTranslator/{index.js → index.ts} +30 -33
- package/core/sqlTranslator/{sql_statement_bucket.js → sql_statement_bucket.ts} +49 -20
- package/core/static/README.md +10 -9
- package/core/static/defaultConfig.yaml +0 -1
- package/core/system/000004.log +0 -0
- package/core/system/CURRENT +1 -0
- package/core/system/IDENTITY +1 -0
- package/core/system/LOCK +0 -0
- package/core/system/LOG +1351 -0
- package/core/system/MANIFEST-000005 +0 -0
- package/core/system/OPTIONS-000013 +607 -0
- package/core/system/OPTIONS-000015 +734 -0
- package/core/upgrade/{UpgradeObjects.js → UpgradeObjects.ts} +3 -6
- package/core/upgrade/directives/5-1-0.ts +89 -0
- package/core/upgrade/directives/{directivesController.js → directivesController.ts} +16 -16
- package/core/upgrade/{directivesManager.js → directivesManager.ts} +7 -11
- package/core/upgrade/{upgradePrompt.js → upgradePrompt.ts} +6 -54
- package/core/upgrade/{upgradeUtilities.js → upgradeUtilities.ts} +3 -7
- package/core/utility/{OperationFunctionCaller.js → OperationFunctionCaller.ts} +7 -7
- package/core/utility/{assignCmdEnvVariables.js → assignCmdEnvVariables.ts} +6 -8
- package/core/utility/{common_utils.js → common_utils.ts} +113 -139
- package/core/utility/environment/{environmentManager.js → environmentManager.ts} +34 -33
- package/core/utility/environment/systemInformation.ts +18 -4
- package/core/utility/errors/{commonErrors.js → commonErrors.ts} +9 -9
- package/core/utility/errors/{hdbError.js → hdbError.ts} +39 -45
- package/core/utility/expandEnvVar.ts +110 -0
- package/core/utility/functions/geo.js +2 -2
- package/core/utility/functions/sql/alaSQLExtension.js +1 -1
- package/core/utility/globalSchema.ts +30 -0
- package/core/utility/hdbTerms.ts +54 -1
- package/core/utility/install/checkJWTTokensExist.js +1 -1
- package/core/utility/install/{installer.js → installer.ts} +86 -62
- package/core/utility/installation.ts +2 -2
- package/core/utility/lmdb/{DBIDefinition.js → DBIDefinition.ts} +4 -1
- package/core/utility/lmdb/{DeleteRecordsResponseObject.js → DeleteRecordsResponseObject.ts} +2 -1
- package/core/utility/lmdb/{InsertRecordsResponseObject.js → InsertRecordsResponseObject.ts} +2 -1
- package/core/utility/lmdb/OpenDBIObject.ts +57 -0
- package/core/utility/lmdb/{OpenEnvironmentObject.js → OpenEnvironmentObject.ts} +19 -6
- package/core/utility/lmdb/{UpdateRecordsResponseObject.js → UpdateRecordsResponseObject.ts} +2 -1
- package/core/utility/lmdb/{UpsertRecordsResponseObject.js → UpsertRecordsResponseObject.ts} +2 -1
- package/core/utility/lmdb/{cleanLMDBMap.js → cleanLMDBMap.ts} +5 -5
- package/core/utility/lmdb/{commonUtility.js → commonUtility.ts} +13 -21
- package/core/utility/lmdb/{deleteUtility.js → deleteUtility.ts} +8 -12
- package/core/utility/lmdb/{environmentUtility.js → environmentUtility.ts} +43 -52
- package/core/utility/lmdb/{searchCursorFunctions.js → searchCursorFunctions.ts} +12 -26
- package/core/utility/lmdb/{searchUtility.js → searchUtility.ts} +75 -64
- package/core/utility/lmdb/{terms.js → terms.ts} +10 -23
- package/core/utility/lmdb/{writeUtility.js → writeUtility.ts} +37 -22
- package/core/utility/logging/{harper_logger.js → harper_logger.ts} +137 -90
- package/core/utility/logging/{logRotator.js → logRotator.ts} +15 -18
- package/core/utility/logging/logger.ts +1 -1
- package/core/utility/logging/{readLog.js → readLog.ts} +19 -19
- package/core/utility/logging/{transactionLog.js → transactionLog.ts} +10 -14
- package/core/utility/{mount_hdb.js → mount_hdb.ts} +15 -16
- package/core/utility/{npmUtilities.js → npmUtilities.ts} +14 -17
- package/core/utility/{operation_authorization.js → operation_authorization.ts} +173 -124
- package/core/utility/packageUtils.js +7 -16
- package/core/utility/password.ts +1 -1
- package/core/utility/processManagement/processManagement.js +2 -2
- package/core/utility/processManagement/servicesConfig.js +1 -1
- package/core/utility/{signalling.js → signalling.ts} +6 -11
- package/core/utility/watcherFallback.ts +74 -0
- package/core/validation/analyticsValidator.ts +44 -0
- package/core/validation/{bulkDeleteValidator.js → bulkDeleteValidator.ts} +5 -5
- package/core/validation/{check_permissions.js → check_permissions.ts} +3 -3
- package/core/validation/{common_validators.js → common_validators.ts} +12 -24
- package/core/validation/{configValidator.js → configValidator.ts} +114 -18
- package/core/validation/{deleteValidator.js → deleteValidator.ts} +5 -5
- package/core/validation/{fileLoadValidator.js → fileLoadValidator.ts} +12 -19
- package/core/validation/{insertValidator.js → insertValidator.ts} +5 -5
- package/core/validation/{installValidator.js → installValidator.ts} +8 -8
- package/core/validation/{readLogValidator.js → readLogValidator.ts} +10 -10
- package/core/validation/{role_validation.js → role_validation.ts} +26 -32
- package/core/validation/{schemaMetadataValidator.js → schemaMetadataValidator.ts} +5 -11
- package/core/validation/{searchValidator.js → searchValidator.ts} +12 -11
- package/core/validation/statusValidator.ts +1 -1
- package/core/validation/{transactionLogValidator.js → transactionLogValidator.ts} +4 -9
- package/core/validation/{user_validation.js → user_validation.ts} +4 -10
- package/core/validation/{validationWrapper.js → validationWrapper.ts} +3 -9
- package/dist/analytics/profile.js +4 -0
- package/dist/analytics/profile.js.map +1 -1
- package/dist/cloneNode/cloneNode.js +224 -12
- package/dist/cloneNode/cloneNode.js.map +1 -1
- package/dist/core/agent/agent.js +175 -0
- package/dist/core/agent/agent.js.map +1 -0
- package/dist/core/agent/loop.js +176 -0
- package/dist/core/agent/loop.js.map +1 -0
- package/dist/core/agent/operations.js +137 -0
- package/dist/core/agent/operations.js.map +1 -0
- package/dist/core/agent/session.js +182 -0
- package/dist/core/agent/session.js.map +1 -0
- package/dist/core/agent/tools/fsTools.js +286 -0
- package/dist/core/agent/tools/fsTools.js.map +1 -0
- package/dist/core/agent/tools/httpFetchTool.js +116 -0
- package/dist/core/agent/tools/httpFetchTool.js.map +1 -0
- package/dist/core/agent/tools/scheduleTool.js +54 -0
- package/dist/core/agent/tools/scheduleTool.js.map +1 -0
- package/dist/core/agent/toolset.js +33 -0
- package/dist/core/agent/toolset.js.map +1 -0
- package/dist/core/agent/types.js +10 -0
- package/dist/core/agent/types.js.map +1 -0
- package/dist/core/bin/BinObjects.js +6 -3
- package/dist/core/bin/BinObjects.js.map +1 -1
- package/dist/core/bin/cliCredentials.js +130 -0
- package/dist/core/bin/cliCredentials.js.map +1 -0
- package/dist/core/bin/cliOperations.js +254 -40
- package/dist/core/bin/cliOperations.js.map +1 -1
- package/dist/core/bin/copyDb.js +16 -16
- package/dist/core/bin/copyDb.js.map +1 -1
- package/dist/core/bin/deployRenderer.js +185 -0
- package/dist/core/bin/deployRenderer.js.map +1 -0
- package/dist/core/bin/harper.js +92 -31
- package/dist/core/bin/harper.js.map +1 -1
- package/dist/core/bin/install.js +41 -4
- package/dist/core/bin/install.js.map +1 -1
- package/dist/core/bin/lite.js +3 -4
- package/dist/core/bin/lite.js.map +1 -1
- package/dist/core/bin/login.js +123 -0
- package/dist/core/bin/login.js.map +1 -0
- package/dist/core/bin/logout.js +16 -0
- package/dist/core/bin/logout.js.map +1 -0
- package/dist/core/bin/mcp/client.js +395 -0
- package/dist/core/bin/mcp/client.js.map +1 -0
- package/dist/core/bin/mcp/doctor.js +193 -0
- package/dist/core/bin/mcp/doctor.js.map +1 -0
- package/dist/core/bin/mcp/index.js +81 -0
- package/dist/core/bin/mcp/index.js.map +1 -0
- package/dist/core/bin/mcp/options.js +113 -0
- package/dist/core/bin/mcp/options.js.map +1 -0
- package/dist/core/bin/mcp/printConfig.js +85 -0
- package/dist/core/bin/mcp/printConfig.js.map +1 -0
- package/dist/core/bin/multipartBuilder.js +55 -0
- package/dist/core/bin/multipartBuilder.js.map +1 -0
- package/dist/core/bin/restart.js +85 -48
- package/dist/core/bin/restart.js.map +1 -1
- package/dist/core/bin/run.js +123 -77
- package/dist/core/bin/run.js.map +1 -1
- package/dist/core/bin/sseConsumer.js +127 -0
- package/dist/core/bin/sseConsumer.js.map +1 -0
- package/dist/core/bin/status.js +48 -11
- package/dist/core/bin/status.js.map +1 -1
- package/dist/core/bin/stop.js +44 -7
- package/dist/core/bin/stop.js.map +1 -1
- package/dist/core/bin/upgrade.js +14 -22
- package/dist/core/bin/upgrade.js.map +1 -1
- package/dist/core/components/Application.js +134 -28
- package/dist/core/components/Application.js.map +1 -1
- package/dist/core/components/ApplicationScope.js +2 -2
- package/dist/core/components/ComponentV1.js +5 -5
- package/dist/core/components/ComponentV1.js.map +1 -1
- package/dist/core/components/EntryHandler.js +153 -13
- package/dist/core/components/EntryHandler.js.map +1 -1
- package/dist/core/components/OptionsWatcher.js +72 -10
- package/dist/core/components/OptionsWatcher.js.map +1 -1
- package/dist/core/components/Scope.js +112 -12
- package/dist/core/components/Scope.js.map +1 -1
- package/dist/core/components/anthropic/index.js +428 -0
- package/dist/core/components/anthropic/index.js.map +1 -0
- package/dist/core/components/bedrock/index.js +734 -0
- package/dist/core/components/bedrock/index.js.map +1 -0
- package/dist/core/components/componentLoader.js +65 -38
- package/dist/core/components/componentLoader.js.map +1 -1
- package/dist/core/components/deployLifecycle.js +156 -0
- package/dist/core/components/deployLifecycle.js.map +1 -0
- package/dist/core/components/deploymentOperations.js +185 -0
- package/dist/core/components/deploymentOperations.js.map +1 -0
- package/dist/core/components/deploymentRecorder.js +425 -0
- package/dist/core/components/deploymentRecorder.js.map +1 -0
- package/dist/core/components/deriveURLPath.js +2 -2
- package/dist/core/components/deriveURLPath.js.map +1 -1
- package/dist/core/components/mcp/adapters/fastify.js +66 -0
- package/dist/core/components/mcp/adapters/fastify.js.map +1 -0
- package/dist/core/components/mcp/adapters/harperHttp.js +78 -0
- package/dist/core/components/mcp/adapters/harperHttp.js.map +1 -0
- package/dist/core/components/mcp/audit.js +73 -0
- package/dist/core/components/mcp/audit.js.map +1 -0
- package/dist/core/components/mcp/index.js +109 -0
- package/dist/core/components/mcp/index.js.map +1 -0
- package/dist/core/components/mcp/jsonrpc.js +93 -0
- package/dist/core/components/mcp/jsonrpc.js.map +1 -0
- package/dist/core/components/mcp/lifecycle.js +79 -0
- package/dist/core/components/mcp/lifecycle.js.map +1 -0
- package/dist/core/components/mcp/listChanged.js +257 -0
- package/dist/core/components/mcp/listChanged.js.map +1 -0
- package/dist/core/components/mcp/rateLimit.js +226 -0
- package/dist/core/components/mcp/rateLimit.js.map +1 -0
- package/dist/core/components/mcp/resources.js +526 -0
- package/dist/core/components/mcp/resources.js.map +1 -0
- package/dist/core/components/mcp/session.js +170 -0
- package/dist/core/components/mcp/session.js.map +1 -0
- package/dist/core/components/mcp/sessionRegistry.js +124 -0
- package/dist/core/components/mcp/sessionRegistry.js.map +1 -0
- package/dist/core/components/mcp/toolRegistry.js +177 -0
- package/dist/core/components/mcp/toolRegistry.js.map +1 -0
- package/dist/core/components/mcp/tools/application.js +660 -0
- package/dist/core/components/mcp/tools/application.js.map +1 -0
- package/dist/core/components/mcp/tools/operations.js +331 -0
- package/dist/core/components/mcp/tools/operations.js.map +1 -0
- package/dist/core/components/mcp/tools/schemas/derive.js +291 -0
- package/dist/core/components/mcp/tools/schemas/derive.js.map +1 -0
- package/dist/core/components/mcp/tools/schemas/operationDescriptions.js +179 -0
- package/dist/core/components/mcp/tools/schemas/operationDescriptions.js.map +1 -0
- package/dist/core/components/mcp/tools/schemas/operations.js +299 -0
- package/dist/core/components/mcp/tools/schemas/operations.js.map +1 -0
- package/dist/core/components/mcp/transport.js +467 -0
- package/dist/core/components/mcp/transport.js.map +1 -0
- package/dist/core/components/ollama/index.js +239 -0
- package/dist/core/components/ollama/index.js.map +1 -0
- package/dist/core/components/openai/index.js +475 -0
- package/dist/core/components/openai/index.js.map +1 -0
- package/dist/core/components/operations.js +205 -52
- package/dist/core/components/operations.js.map +1 -1
- package/dist/core/components/operationsValidation.js +13 -4
- package/dist/core/components/operationsValidation.js.map +1 -1
- package/dist/core/components/packageComponent.js +87 -26
- package/dist/core/components/packageComponent.js.map +1 -1
- package/dist/core/components/requestRestart.js +12 -1
- package/dist/core/components/requestRestart.js.map +1 -1
- package/dist/core/components/status/crossThread.js +12 -5
- package/dist/core/components/status/crossThread.js.map +1 -1
- package/dist/core/components/status/errors.js +7 -7
- package/dist/core/config/RootConfigWatcher.js +52 -1
- package/dist/core/config/RootConfigWatcher.js.map +1 -1
- package/dist/core/config/configUtils.js +31 -8
- package/dist/core/config/configUtils.js.map +1 -1
- package/dist/core/config/harperConfigEnvVars.js +1 -1
- package/dist/core/config/harperConfigEnvVars.js.map +1 -1
- package/dist/core/dataLayer/CreateAttributeObject.js +4 -3
- package/dist/core/dataLayer/CreateAttributeObject.js.map +1 -1
- package/dist/core/dataLayer/CreateTableObject.js +2 -1
- package/dist/core/dataLayer/CreateTableObject.js.map +1 -1
- package/dist/core/dataLayer/DataLayerObjects.js +19 -5
- package/dist/core/dataLayer/DataLayerObjects.js.map +1 -1
- package/dist/core/dataLayer/DeleteBeforeObject.js +2 -1
- package/dist/core/dataLayer/DeleteBeforeObject.js.map +1 -1
- package/dist/core/dataLayer/DeleteObject.js +4 -3
- package/dist/core/dataLayer/DeleteObject.js.map +1 -1
- package/dist/core/dataLayer/DropAttributeObject.js +2 -1
- package/dist/core/dataLayer/DropAttributeObject.js.map +1 -1
- package/dist/core/dataLayer/GetBackupObject.js +4 -3
- package/dist/core/dataLayer/GetBackupObject.js.map +1 -1
- package/dist/core/dataLayer/InsertObject.js +4 -3
- package/dist/core/dataLayer/InsertObject.js.map +1 -1
- package/dist/core/dataLayer/ReadAuditLogObject.js +4 -3
- package/dist/core/dataLayer/ReadAuditLogObject.js.map +1 -1
- package/dist/core/dataLayer/SQLSearch.js +140 -78
- package/dist/core/dataLayer/SQLSearch.js.map +1 -1
- package/dist/core/dataLayer/SearchByConditionsObject.js +5 -7
- package/dist/core/dataLayer/SearchByConditionsObject.js.map +1 -1
- package/dist/core/dataLayer/SearchByHashObject.js +2 -1
- package/dist/core/dataLayer/SearchByHashObject.js.map +1 -1
- package/dist/core/dataLayer/SearchObject.js +2 -1
- package/dist/core/dataLayer/SearchObject.js.map +1 -1
- package/dist/core/dataLayer/SqlSearchObject.js +2 -1
- package/dist/core/dataLayer/SqlSearchObject.js.map +1 -1
- package/dist/core/dataLayer/UpdateObject.js +4 -3
- package/dist/core/dataLayer/UpdateObject.js.map +1 -1
- package/dist/core/dataLayer/UpsertObject.js +4 -3
- package/dist/core/dataLayer/UpsertObject.js.map +1 -1
- package/dist/core/dataLayer/bulkLoad.js +122 -88
- package/dist/core/dataLayer/bulkLoad.js.map +1 -1
- package/dist/core/dataLayer/delete.js +74 -39
- package/dist/core/dataLayer/delete.js.map +1 -1
- package/dist/core/dataLayer/export.js +90 -55
- package/dist/core/dataLayer/export.js.map +1 -1
- package/dist/core/dataLayer/getBackup.js +43 -11
- package/dist/core/dataLayer/getBackup.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/BridgeMethods.js +41 -20
- package/dist/core/dataLayer/harperBridge/BridgeMethods.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/ResourceBridge.js +26 -25
- package/dist/core/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/TableSizeObject.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +4 -4
- package/dist/core/dataLayer/harperBridge/harperBridge.js +38 -4
- package/dist/core/dataLayer/harperBridge/harperBridge.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +7 -6
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +5 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +3 -3
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +2 -2
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +8 -8
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +3 -3
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +3 -3
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +2 -2
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +2 -2
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +5 -3
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +2 -2
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +4 -4
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js.map +1 -1
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +5 -5
- package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +4 -4
- package/dist/core/dataLayer/hdbInfoController.js +66 -31
- package/dist/core/dataLayer/hdbInfoController.js.map +1 -1
- package/dist/core/dataLayer/insert.js +63 -28
- package/dist/core/dataLayer/insert.js.map +1 -1
- package/dist/core/dataLayer/readAuditLog.js +45 -13
- package/dist/core/dataLayer/readAuditLog.js.map +1 -1
- package/dist/core/dataLayer/schema.js +124 -89
- package/dist/core/dataLayer/schema.js.map +1 -1
- package/dist/core/dataLayer/schemaDescribe.js +78 -41
- package/dist/core/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/core/dataLayer/search.js +12 -13
- package/dist/core/dataLayer/search.js.map +1 -1
- package/dist/core/dataLayer/transaction.js +3 -4
- package/dist/core/dataLayer/transaction.js.map +1 -1
- package/dist/core/dataLayer/update.js +53 -18
- package/dist/core/dataLayer/update.js.map +1 -1
- package/dist/core/globals.js +1 -0
- package/dist/core/globals.js.map +1 -1
- package/dist/core/index.js +4 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/json/systemSchema.json +65 -0
- package/dist/core/launchServiceScripts/utility/checkNodeVersion.js +3 -0
- package/dist/core/launchServiceScripts/utility/checkNodeVersion.js.map +1 -1
- package/dist/core/resources/DatabaseTransaction.js +39 -15
- package/dist/core/resources/DatabaseTransaction.js.map +1 -1
- package/dist/core/resources/ErrorResource.js +3 -1
- package/dist/core/resources/ErrorResource.js.map +1 -1
- package/dist/core/resources/LMDBTransaction.js +18 -7
- package/dist/core/resources/LMDBTransaction.js.map +1 -1
- package/dist/core/resources/RecordEncoder.js +38 -38
- package/dist/core/resources/RecordEncoder.js.map +1 -1
- package/dist/core/resources/RequestTarget.js.map +1 -1
- package/dist/core/resources/Resource.js +43 -10
- package/dist/core/resources/Resource.js.map +1 -1
- package/dist/core/resources/ResourceInterface.js +20 -0
- package/dist/core/resources/ResourceInterface.js.map +1 -1
- package/dist/core/resources/Resources.js +7 -6
- package/dist/core/resources/Resources.js.map +1 -1
- package/dist/core/resources/RocksIndexStore.js +3 -0
- package/dist/core/resources/RocksIndexStore.js.map +1 -1
- package/dist/core/resources/RocksTransactionLogStore.js +10 -3
- package/dist/core/resources/RocksTransactionLogStore.js.map +1 -1
- package/dist/core/resources/Table.js +306 -116
- package/dist/core/resources/Table.js.map +1 -1
- package/dist/core/resources/analytics/metadata.js +1 -0
- package/dist/core/resources/analytics/metadata.js.map +1 -1
- package/dist/core/resources/analytics/read.js +69 -8
- package/dist/core/resources/analytics/read.js.map +1 -1
- package/dist/core/resources/analytics/write.js +232 -20
- package/dist/core/resources/analytics/write.js.map +1 -1
- package/dist/core/resources/auditStore.js +16 -8
- package/dist/core/resources/auditStore.js.map +1 -1
- package/dist/core/resources/blob.js +8 -8
- package/dist/core/resources/blob.js.map +1 -1
- package/dist/core/resources/dataLoader.js +13 -13
- package/dist/core/resources/databases.js +175 -59
- package/dist/core/resources/databases.js.map +1 -1
- package/dist/core/resources/graphql.js +267 -173
- package/dist/core/resources/graphql.js.map +1 -1
- package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js +327 -59
- package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
- package/dist/core/resources/indexes/vector.js +14 -0
- package/dist/core/resources/indexes/vector.js.map +1 -1
- package/dist/core/resources/jsonSchemaTypes.js +78 -0
- package/dist/core/resources/jsonSchemaTypes.js.map +1 -0
- package/dist/core/resources/loadEnv.js +21 -18
- package/dist/core/resources/loadEnv.js.map +1 -1
- package/dist/core/resources/login.js +5 -4
- package/dist/core/resources/login.js.map +1 -1
- package/dist/core/resources/models/Models.js +265 -0
- package/dist/core/resources/models/Models.js.map +1 -0
- package/dist/core/resources/models/TestBackend.js +71 -0
- package/dist/core/resources/models/TestBackend.js.map +1 -0
- package/dist/core/resources/models/agentLoop.js +746 -0
- package/dist/core/resources/models/agentLoop.js.map +1 -0
- package/dist/core/resources/models/analyticsTable.js +166 -0
- package/dist/core/resources/models/analyticsTable.js.map +1 -0
- package/dist/core/resources/models/backendHelpers.js +109 -0
- package/dist/core/resources/models/backendHelpers.js.map +1 -0
- package/dist/core/resources/models/backendRegistry.js +54 -0
- package/dist/core/resources/models/backendRegistry.js.map +1 -0
- package/dist/core/resources/models/bootstrap.js +112 -0
- package/dist/core/resources/models/bootstrap.js.map +1 -0
- package/dist/core/resources/models/embedHook.js +127 -0
- package/dist/core/resources/models/embedHook.js.map +1 -0
- package/dist/core/resources/models/types.js +11 -0
- package/dist/core/resources/models/types.js.map +1 -0
- package/dist/core/resources/openApi.js +74 -34
- package/dist/core/resources/openApi.js.map +1 -1
- package/dist/core/resources/replayLogs.js +7 -1
- package/dist/core/resources/replayLogs.js.map +1 -1
- package/dist/core/resources/replayLogsGuards.js +47 -0
- package/dist/core/resources/replayLogsGuards.js.map +1 -1
- package/dist/core/resources/roles.js +67 -71
- package/dist/core/resources/roles.js.map +1 -1
- package/dist/core/resources/search.js +349 -140
- package/dist/core/resources/search.js.map +1 -1
- package/dist/core/resources/tracked.js +23 -15
- package/dist/core/resources/tracked.js.map +1 -1
- package/dist/core/resources/transaction.js +1 -1
- package/dist/core/resources/transaction.js.map +1 -1
- package/dist/core/resources/transactionBroadcast.js.map +1 -1
- package/dist/core/security/auth.js +34 -25
- package/dist/core/security/auth.js.map +1 -1
- package/dist/core/security/certificateVerification/crlVerification.js +7 -1
- package/dist/core/security/certificateVerification/crlVerification.js.map +1 -1
- package/dist/core/security/cryptoHash.js +37 -5
- package/dist/core/security/cryptoHash.js.map +1 -1
- package/dist/core/security/data_objects/PermissionAttributeResponseObject.js +4 -1
- package/dist/core/security/data_objects/PermissionAttributeResponseObject.js.map +1 -1
- package/dist/core/security/data_objects/PermissionResponseObject.js +15 -8
- package/dist/core/security/data_objects/PermissionResponseObject.js.map +1 -1
- package/dist/core/security/data_objects/PermissionTableResponseObject.js +6 -1
- package/dist/core/security/data_objects/PermissionTableResponseObject.js.map +1 -1
- package/dist/core/security/fastifyAuth.js +131 -22
- package/dist/core/security/fastifyAuth.js.map +1 -1
- package/dist/core/security/impersonation.js +15 -15
- package/dist/core/security/jsLoader.js +18 -5
- package/dist/core/security/jsLoader.js.map +1 -1
- package/dist/core/security/keys.js +160 -114
- package/dist/core/security/keys.js.map +1 -1
- package/dist/core/security/permissionsTranslator.js +2 -2
- package/dist/core/security/role.js +70 -35
- package/dist/core/security/role.js.map +1 -1
- package/dist/core/security/tokenAuthentication.js +57 -27
- package/dist/core/security/tokenAuthentication.js.map +1 -1
- package/dist/core/security/user.js +74 -38
- package/dist/core/security/user.js.map +1 -1
- package/dist/core/server/DurableSubscriptionsSession.js +71 -55
- package/dist/core/server/DurableSubscriptionsSession.js.map +1 -1
- package/dist/core/server/REST.js +17 -16
- package/dist/core/server/REST.js.map +1 -1
- package/dist/core/server/Server.js +1 -1
- package/dist/core/server/Server.js.map +1 -1
- package/dist/core/server/fastifyRoutes/helpers/getCORSOptions.js +1 -1
- package/dist/core/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +1 -1
- package/dist/core/server/fastifyRoutes/helpers/getServerOptions.js +1 -1
- package/dist/core/server/fastifyRoutes.js +34 -30
- package/dist/core/server/fastifyRoutes.js.map +1 -1
- package/dist/core/server/graphqlQuerying.js +8 -7
- package/dist/core/server/graphqlQuerying.js.map +1 -1
- package/dist/core/server/http.js +523 -47
- package/dist/core/server/http.js.map +1 -1
- package/dist/core/server/itc/serverHandlers.js +66 -15
- package/dist/core/server/itc/serverHandlers.js.map +1 -1
- package/dist/core/server/jobs/JobObject.js +53 -7
- package/dist/core/server/jobs/JobObject.js.map +1 -1
- package/dist/core/server/jobs/jobProcess.js +64 -24
- package/dist/core/server/jobs/jobProcess.js.map +1 -1
- package/dist/core/server/jobs/jobRunner.js +68 -30
- package/dist/core/server/jobs/jobRunner.js.map +1 -1
- package/dist/core/server/jobs/jobs.js +93 -61
- package/dist/core/server/jobs/jobs.js.map +1 -1
- package/dist/core/server/loadRootComponents.js +1 -1
- package/dist/core/server/middlewareChain.js +252 -0
- package/dist/core/server/middlewareChain.js.map +1 -0
- package/dist/core/server/mqtt.js +22 -17
- package/dist/core/server/mqtt.js.map +1 -1
- package/dist/core/server/nodeName.js +46 -13
- package/dist/core/server/nodeName.js.map +1 -1
- package/dist/core/server/operationsServer.js +106 -33
- package/dist/core/server/operationsServer.js.map +1 -1
- package/dist/core/server/serverHelpers/Headers.js +2 -0
- package/dist/core/server/serverHelpers/Headers.js.map +1 -1
- package/dist/core/server/serverHelpers/JSONStream.js +12 -3
- package/dist/core/server/serverHelpers/JSONStream.js.map +1 -1
- package/dist/core/server/serverHelpers/Request.js +370 -9
- package/dist/core/server/serverHelpers/Request.js.map +1 -1
- package/dist/core/server/serverHelpers/contentTypes.js +36 -7
- package/dist/core/server/serverHelpers/contentTypes.js.map +1 -1
- package/dist/core/server/serverHelpers/multipartParser.js +142 -0
- package/dist/core/server/serverHelpers/multipartParser.js.map +1 -0
- package/dist/core/server/serverHelpers/progressEmitter.js +103 -0
- package/dist/core/server/serverHelpers/progressEmitter.js.map +1 -0
- package/dist/core/server/serverHelpers/serverHandlers.js +38 -7
- package/dist/core/server/serverHelpers/serverHandlers.js.map +1 -1
- package/dist/core/server/serverHelpers/serverUtilities.js +97 -93
- package/dist/core/server/serverHelpers/serverUtilities.js.map +1 -1
- package/dist/core/server/static.js +8 -5
- package/dist/core/server/static.js.map +1 -1
- package/dist/core/server/status/index.js +3 -3
- package/dist/core/server/storageReclamation.js +68 -9
- package/dist/core/server/storageReclamation.js.map +1 -1
- package/dist/core/server/threads/itc.js +7 -4
- package/dist/core/server/threads/itc.js.map +1 -1
- package/dist/core/server/threads/manageThreads.js +110 -26
- package/dist/core/server/threads/manageThreads.js.map +1 -1
- package/dist/core/server/threads/socketRouter.js +8 -271
- package/dist/core/server/threads/socketRouter.js.map +1 -1
- package/dist/core/server/threads/threadServer.js +360 -118
- package/dist/core/server/threads/threadServer.js.map +1 -1
- package/dist/core/server/threads/workerProcessGuard.js +114 -0
- package/dist/core/server/threads/workerProcessGuard.js.map +1 -0
- package/dist/core/server/throttle.js +17 -0
- package/dist/core/server/throttle.js.map +1 -1
- package/dist/core/sqlTranslator/SelectValidator.js +86 -47
- package/dist/core/sqlTranslator/SelectValidator.js.map +1 -1
- package/dist/core/sqlTranslator/alasqlFunctionImporter.js +40 -3
- package/dist/core/sqlTranslator/alasqlFunctionImporter.js.map +1 -1
- package/dist/core/sqlTranslator/deleteTranslator.js +48 -14
- package/dist/core/sqlTranslator/deleteTranslator.js.map +1 -1
- package/dist/core/sqlTranslator/index.js +69 -30
- package/dist/core/sqlTranslator/index.js.map +1 -1
- package/dist/core/sqlTranslator/sql_statement_bucket.js +55 -13
- package/dist/core/sqlTranslator/sql_statement_bucket.js.map +1 -1
- package/dist/core/upgrade/UpgradeObjects.js +37 -4
- package/dist/core/upgrade/UpgradeObjects.js.map +1 -1
- package/dist/core/upgrade/directives/5-1-0.js +114 -0
- package/dist/core/upgrade/directives/5-1-0.js.map +1 -0
- package/dist/core/upgrade/directives/directivesController.js +52 -11
- package/dist/core/upgrade/directives/directivesController.js.map +1 -1
- package/dist/core/upgrade/directivesManager.js +53 -18
- package/dist/core/upgrade/directivesManager.js.map +1 -1
- package/dist/core/upgrade/upgradePrompt.js +55 -60
- package/dist/core/upgrade/upgradePrompt.js.map +1 -1
- package/dist/core/upgrade/upgradeUtilities.js +37 -5
- package/dist/core/upgrade/upgradeUtilities.js.map +1 -1
- package/dist/core/utility/OperationFunctionCaller.js +45 -10
- package/dist/core/utility/OperationFunctionCaller.js.map +1 -1
- package/dist/core/utility/assignCmdEnvVariables.js +8 -4
- package/dist/core/utility/assignCmdEnvVariables.js.map +1 -1
- package/dist/core/utility/common_utils.js +140 -79
- package/dist/core/utility/common_utils.js.map +1 -1
- package/dist/core/utility/environment/environmentManager.js +75 -29
- package/dist/core/utility/environment/environmentManager.js.map +1 -1
- package/dist/core/utility/environment/systemInformation.js +27 -16
- package/dist/core/utility/environment/systemInformation.js.map +1 -1
- package/dist/core/utility/errors/commonErrors.js +49 -18
- package/dist/core/utility/errors/commonErrors.js.map +1 -1
- package/dist/core/utility/errors/hdbError.js +65 -26
- package/dist/core/utility/errors/hdbError.js.map +1 -1
- package/dist/core/utility/expandEnvVar.js +113 -0
- package/dist/core/utility/expandEnvVar.js.map +1 -0
- package/dist/core/utility/functions/geo.js +2 -2
- package/dist/core/utility/functions/sql/alaSQLExtension.js +1 -1
- package/dist/core/utility/globalSchema.js +14 -11
- package/dist/core/utility/globalSchema.js.map +1 -1
- package/dist/core/utility/hdbTerms.js +54 -1
- package/dist/core/utility/hdbTerms.js.map +1 -1
- package/dist/core/utility/install/checkJWTTokensExist.js +1 -1
- package/dist/core/utility/install/installer.js +136 -73
- package/dist/core/utility/install/installer.js.map +1 -1
- package/dist/core/utility/installation.js +3 -3
- package/dist/core/utility/lmdb/DBIDefinition.js +5 -1
- package/dist/core/utility/lmdb/DBIDefinition.js.map +1 -1
- package/dist/core/utility/lmdb/DeleteRecordsResponseObject.js +2 -1
- package/dist/core/utility/lmdb/DeleteRecordsResponseObject.js.map +1 -1
- package/dist/core/utility/lmdb/InsertRecordsResponseObject.js +2 -1
- package/dist/core/utility/lmdb/InsertRecordsResponseObject.js.map +1 -1
- package/dist/core/utility/lmdb/OpenDBIObject.js +68 -6
- package/dist/core/utility/lmdb/OpenDBIObject.js.map +1 -1
- package/dist/core/utility/lmdb/OpenEnvironmentObject.js +52 -4
- package/dist/core/utility/lmdb/OpenEnvironmentObject.js.map +1 -1
- package/dist/core/utility/lmdb/UpdateRecordsResponseObject.js +2 -1
- package/dist/core/utility/lmdb/UpdateRecordsResponseObject.js.map +1 -1
- package/dist/core/utility/lmdb/UpsertRecordsResponseObject.js +2 -1
- package/dist/core/utility/lmdb/UpsertRecordsResponseObject.js.map +1 -1
- package/dist/core/utility/lmdb/cleanLMDBMap.js +44 -7
- package/dist/core/utility/lmdb/cleanLMDBMap.js.map +1 -1
- package/dist/core/utility/lmdb/commonUtility.js +46 -17
- package/dist/core/utility/lmdb/commonUtility.js.map +1 -1
- package/dist/core/utility/lmdb/deleteUtility.js +51 -16
- package/dist/core/utility/lmdb/deleteUtility.js.map +1 -1
- package/dist/core/utility/lmdb/environmentUtility.js +91 -51
- package/dist/core/utility/lmdb/environmentUtility.js.map +1 -1
- package/dist/core/utility/lmdb/searchCursorFunctions.js +46 -14
- package/dist/core/utility/lmdb/searchCursorFunctions.js.map +1 -1
- package/dist/core/utility/lmdb/searchUtility.js +91 -55
- package/dist/core/utility/lmdb/searchUtility.js.map +1 -1
- package/dist/core/utility/lmdb/terms.js +12 -22
- package/dist/core/utility/lmdb/terms.js.map +1 -1
- package/dist/core/utility/lmdb/writeUtility.js +61 -28
- package/dist/core/utility/lmdb/writeUtility.js.map +1 -1
- package/dist/core/utility/logging/harper_logger.js +177 -82
- package/dist/core/utility/logging/harper_logger.js.map +1 -1
- package/dist/core/utility/logging/logRotator.js +67 -32
- package/dist/core/utility/logging/logRotator.js.map +1 -1
- package/dist/core/utility/logging/logger.js +4 -4
- package/dist/core/utility/logging/readLog.js +54 -17
- package/dist/core/utility/logging/readLog.js.map +1 -1
- package/dist/core/utility/logging/transactionLog.js +51 -16
- package/dist/core/utility/logging/transactionLog.js.map +1 -1
- package/dist/core/utility/mount_hdb.js +54 -17
- package/dist/core/utility/mount_hdb.js.map +1 -1
- package/dist/core/utility/npmUtilities.js +54 -19
- package/dist/core/utility/npmUtilities.js.map +1 -1
- package/dist/core/utility/operation_authorization.js +135 -86
- package/dist/core/utility/operation_authorization.js.map +1 -1
- package/dist/core/utility/packageUtils.js +7 -17
- package/dist/core/utility/packageUtils.js.map +1 -1
- package/dist/core/utility/password.js +2 -2
- package/dist/core/utility/processManagement/processManagement.js +2 -2
- package/dist/core/utility/processManagement/servicesConfig.js +1 -1
- package/dist/core/utility/signalling.js +51 -16
- package/dist/core/utility/signalling.js.map +1 -1
- package/dist/core/utility/watcherFallback.js +73 -0
- package/dist/core/utility/watcherFallback.js.map +1 -0
- package/dist/core/validation/analyticsValidator.js +80 -0
- package/dist/core/validation/analyticsValidator.js.map +1 -0
- package/dist/core/validation/bulkDeleteValidator.js +49 -11
- package/dist/core/validation/bulkDeleteValidator.js.map +1 -1
- package/dist/core/validation/check_permissions.js +38 -3
- package/dist/core/validation/check_permissions.js.map +1 -1
- package/dist/core/validation/common_validators.js +62 -31
- package/dist/core/validation/common_validators.js.map +1 -1
- package/dist/core/validation/configValidator.js +189 -54
- package/dist/core/validation/configValidator.js.map +1 -1
- package/dist/core/validation/deleteValidator.js +49 -11
- package/dist/core/validation/deleteValidator.js.map +1 -1
- package/dist/core/validation/fileLoadValidator.js +67 -32
- package/dist/core/validation/fileLoadValidator.js.map +1 -1
- package/dist/core/validation/insertValidator.js +48 -10
- package/dist/core/validation/insertValidator.js.map +1 -1
- package/dist/core/validation/installValidator.js +47 -10
- package/dist/core/validation/installValidator.js.map +1 -1
- package/dist/core/validation/readLogValidator.js +60 -22
- package/dist/core/validation/readLogValidator.js.map +1 -1
- package/dist/core/validation/role_validation.js +55 -19
- package/dist/core/validation/role_validation.js.map +1 -1
- package/dist/core/validation/schemaMetadataValidator.js +11 -12
- package/dist/core/validation/schemaMetadataValidator.js.map +1 -1
- package/dist/core/validation/searchValidator.js +82 -43
- package/dist/core/validation/searchValidator.js.map +1 -1
- package/dist/core/validation/transactionLogValidator.js +52 -17
- package/dist/core/validation/transactionLogValidator.js.map +1 -1
- package/dist/core/validation/user_validation.js +38 -6
- package/dist/core/validation/user_validation.js.map +1 -1
- package/dist/core/validation/validationWrapper.js +4 -5
- package/dist/core/validation/validationWrapper.js.map +1 -1
- package/dist/licensing/usageLicensing.js +30 -21
- package/dist/licensing/usageLicensing.js.map +1 -1
- package/dist/replication/knownNodes.js +171 -41
- package/dist/replication/knownNodes.js.map +1 -1
- package/dist/replication/replicationConnection.js +441 -85
- package/dist/replication/replicationConnection.js.map +1 -1
- package/dist/replication/replicator.js +56 -28
- package/dist/replication/replicator.js.map +1 -1
- package/dist/replication/setNode.js +24 -4
- package/dist/replication/setNode.js.map +1 -1
- package/dist/replication/subscriptionManager.js +195 -16
- package/dist/replication/subscriptionManager.js.map +1 -1
- package/dist/security/certificate.js +41 -6
- package/dist/security/certificate.js.map +1 -1
- package/dist/security/sshKeyOperations.js +35 -2
- package/dist/security/sshKeyOperations.js.map +1 -1
- package/licensing/usageLicensing.ts +32 -37
- package/npm-shrinkwrap.json +9032 -4334
- package/package.json +17 -12
- package/replication/DESIGN.md +139 -0
- package/replication/knownNodes.ts +165 -44
- package/replication/replicationConnection.ts +475 -92
- package/replication/replicator.ts +54 -27
- package/replication/setNode.ts +29 -10
- package/replication/subscriptionManager.ts +227 -21
- package/security/certificate.ts +8 -4
- package/security/sshKeyOperations.ts +1 -1
- package/static/defaultConfig.yaml +1 -0
- package/studio/web/assets/{index-CybLScHg.js → index-Dqr9oVhe.js} +5 -5
- package/studio/web/assets/index-Dqr9oVhe.js.map +1 -0
- package/studio/web/assets/{index.lazy-DKx5-iXF.js → index.lazy-CpKcKb7M.js} +2 -2
- package/studio/web/assets/{index.lazy-DKx5-iXF.js.map → index.lazy-CpKcKb7M.js.map} +1 -1
- package/studio/web/assets/{profile-BOjes0Wl.js → profile-C1cujdsg.js} +2 -2
- package/studio/web/assets/{profile-BOjes0Wl.js.map → profile-C1cujdsg.js.map} +1 -1
- package/studio/web/assets/{status-EWKUIrjT.js → status-CTiIIQlY.js} +2 -2
- package/studio/web/assets/{status-EWKUIrjT.js.map → status-CTiIIQlY.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/core/bin/cliOperations.js +0 -159
- package/core/bin/lite.js +0 -5
- package/core/bin/stop.js +0 -21
- package/core/dataLayer/harperBridge/BridgeMethods.js +0 -85
- package/core/utility/globalSchema.js +0 -35
- package/core/utility/lmdb/OpenDBIObject.js +0 -31
- package/studio/web/assets/index-CybLScHg.js.map +0 -1
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
export type HttpEntry = {
|
|
2
|
+
listener: Function;
|
|
3
|
+
port: number | string;
|
|
4
|
+
name?: string;
|
|
5
|
+
before?: string;
|
|
6
|
+
after?: string;
|
|
7
|
+
urlPath?: string;
|
|
8
|
+
host?: string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Topological sort of middleware entries respecting `before`/`after` constraints.
|
|
13
|
+
* Uses the original registration index as a tiebreaker so config order is preserved
|
|
14
|
+
* when there are no constraints between two entries.
|
|
15
|
+
*
|
|
16
|
+
* `before: 'X'` → this entry must run before the FIRST entry named X.
|
|
17
|
+
* `after: 'X'` → this entry must run after the LAST entry named X.
|
|
18
|
+
*
|
|
19
|
+
* @param onCycle - called when a cycle is detected; entries are returned unsorted.
|
|
20
|
+
*/
|
|
21
|
+
export function topoSort(entries: HttpEntry[], onCycle?: () => void): HttpEntry[] {
|
|
22
|
+
const n = entries.length;
|
|
23
|
+
if (n <= 1) return entries;
|
|
24
|
+
|
|
25
|
+
// Map name → first and last index (for before/after semantics)
|
|
26
|
+
const nameToFirst = new Map<string, number>();
|
|
27
|
+
const nameToLast = new Map<string, number>();
|
|
28
|
+
for (let i = 0; i < n; i++) {
|
|
29
|
+
const name = entries[i].name;
|
|
30
|
+
if (name) {
|
|
31
|
+
if (!nameToFirst.has(name)) nameToFirst.set(name, i);
|
|
32
|
+
nameToLast.set(name, i);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// successors[i] = list of indices that must come after i
|
|
37
|
+
const successors: number[][] = Array.from({ length: n }, () => []);
|
|
38
|
+
const inDegree = new Int32Array(n);
|
|
39
|
+
const addEdge = (from: number, to: number) => {
|
|
40
|
+
successors[from].push(to);
|
|
41
|
+
inDegree[to]++;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
for (let i = 0; i < n; i++) {
|
|
45
|
+
const { before, after } = entries[i];
|
|
46
|
+
if (before) {
|
|
47
|
+
const j = nameToFirst.get(before);
|
|
48
|
+
if (j !== undefined && j !== i) addEdge(i, j);
|
|
49
|
+
}
|
|
50
|
+
if (after) {
|
|
51
|
+
const j = nameToLast.get(after);
|
|
52
|
+
if (j !== undefined && j !== i) addEdge(j, i);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Kahn's algorithm; use original index as tiebreaker to preserve registration/config order
|
|
57
|
+
const ready: number[] = [];
|
|
58
|
+
for (let i = 0; i < n; i++) {
|
|
59
|
+
if (inDegree[i] === 0) ready.push(i);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const sorted: HttpEntry[] = [];
|
|
63
|
+
while (ready.length > 0) {
|
|
64
|
+
const i = ready.shift()!;
|
|
65
|
+
sorted.push(entries[i]);
|
|
66
|
+
for (const j of successors[i]) {
|
|
67
|
+
if (--inDegree[j] === 0) {
|
|
68
|
+
// Binary-insert to keep ready sorted by original index
|
|
69
|
+
let lo = 0,
|
|
70
|
+
hi = ready.length;
|
|
71
|
+
while (lo < hi) {
|
|
72
|
+
const mid = (lo + hi) >> 1;
|
|
73
|
+
if (ready[mid] < j) lo = mid + 1;
|
|
74
|
+
else hi = mid;
|
|
75
|
+
}
|
|
76
|
+
ready.splice(lo, 0, j);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (sorted.length !== n) {
|
|
82
|
+
onCycle?.();
|
|
83
|
+
return entries;
|
|
84
|
+
}
|
|
85
|
+
return sorted;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Builds a linear middleware chain from a sorted array of entries.
|
|
90
|
+
* The first entry in `sorted` is the outermost (called first).
|
|
91
|
+
* `fallback` is invoked when all entries call next() without handling the request.
|
|
92
|
+
*/
|
|
93
|
+
export function buildLinearChain(sorted: HttpEntry[], fallback: Function): Function {
|
|
94
|
+
let next = fallback;
|
|
95
|
+
for (let i = sorted.length; i > 0; ) {
|
|
96
|
+
const { listener } = sorted[--i];
|
|
97
|
+
const callback = next;
|
|
98
|
+
next = (...args: any[]) => listener(...args, callback);
|
|
99
|
+
}
|
|
100
|
+
return next;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Resolves transitive `after` dependencies for a set of entries.
|
|
105
|
+
* If entry A says `after: 'auth'` and auth is in `nameToEntry` but not in `entries`,
|
|
106
|
+
* auth is pulled into the result so that the ordering constraint can be satisfied.
|
|
107
|
+
* `before` constraints do NOT pull in entries — they only affect ordering.
|
|
108
|
+
*/
|
|
109
|
+
export function resolveDeps(entries: HttpEntry[], nameToEntry: Map<string, HttpEntry>): HttpEntry[] {
|
|
110
|
+
const included = new Set(entries);
|
|
111
|
+
let changed = true;
|
|
112
|
+
while (changed) {
|
|
113
|
+
changed = false;
|
|
114
|
+
for (const entry of [...included]) {
|
|
115
|
+
if (entry.after) {
|
|
116
|
+
const dep = nameToEntry.get(entry.after);
|
|
117
|
+
if (dep && !included.has(dep)) {
|
|
118
|
+
included.add(dep);
|
|
119
|
+
changed = true;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return [...included];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Normalizes a urlPath by stripping a single trailing slash (except for the root '/').
|
|
129
|
+
* '/api' and '/api/' are treated equivalently for routing/matching.
|
|
130
|
+
*/
|
|
131
|
+
export function normalizeUrlPath(urlPath: string | undefined): string | undefined {
|
|
132
|
+
if (!urlPath || urlPath.length <= 1) return urlPath;
|
|
133
|
+
return urlPath.endsWith('/') ? urlPath.slice(0, -1) : urlPath;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Returns true when `request` satisfies the route's host and urlPath constraints.
|
|
138
|
+
* urlPath matching is prefix-based and segment-boundary-aware:
|
|
139
|
+
* '/api' matches '/api' and '/api/foo' but NOT '/api2'.
|
|
140
|
+
* Trailing slashes on `route.urlPath` are ignored.
|
|
141
|
+
*/
|
|
142
|
+
export function matchesRoute(request: any, route: { host?: string; urlPath?: string }): boolean {
|
|
143
|
+
if (route.host) {
|
|
144
|
+
const hostHeader: string = request.headers?.asObject?.host ?? '';
|
|
145
|
+
const requestHost = hostHeader.split(':')[0];
|
|
146
|
+
if (requestHost !== route.host) return false;
|
|
147
|
+
}
|
|
148
|
+
const urlPath = normalizeUrlPath(route.urlPath);
|
|
149
|
+
if (urlPath) {
|
|
150
|
+
const pathname: string = request.pathname ?? '/';
|
|
151
|
+
if (pathname !== urlPath && !pathname.startsWith(urlPath + '/')) return false;
|
|
152
|
+
}
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Returns a proxy of `request` with `pathname` and `url` rewritten so that
|
|
158
|
+
* `prefix` is stripped from the path. e.g. prefix='/foo', pathname='/foo/bar' → '/bar'.
|
|
159
|
+
* Trailing slashes on `prefix` are ignored. The strip is computed lazily on each
|
|
160
|
+
* access so that downstream mutations to `request.pathname` remain reflected.
|
|
161
|
+
* The original request object is not mutated.
|
|
162
|
+
*/
|
|
163
|
+
export function stripPrefix(request: any, prefix: string): any {
|
|
164
|
+
const normalizedPrefix = normalizeUrlPath(prefix) ?? '';
|
|
165
|
+
return new Proxy(request, {
|
|
166
|
+
get(target, prop) {
|
|
167
|
+
if (prop === 'pathname') {
|
|
168
|
+
const origPathname: string = target.pathname ?? '/';
|
|
169
|
+
return origPathname === normalizedPrefix ? '/' : origPathname.slice(normalizedPrefix.length);
|
|
170
|
+
}
|
|
171
|
+
if (prop === 'url') {
|
|
172
|
+
const origPathname: string = target.pathname ?? '/';
|
|
173
|
+
const origUrl: string = target.url ?? '';
|
|
174
|
+
const stripped = origPathname === normalizedPrefix ? '/' : origPathname.slice(normalizedPrefix.length);
|
|
175
|
+
return stripped + origUrl.slice(origPathname.length);
|
|
176
|
+
}
|
|
177
|
+
return Reflect.get(target, prop);
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Builds a dispatching chain when sub-routes (urlPath/host) are present.
|
|
184
|
+
*
|
|
185
|
+
* Each sub-route gets its own complete chain. If a sub-route entry declares
|
|
186
|
+
* `after: 'X'`, entry X is pulled in from any route's registry so that the
|
|
187
|
+
* constraint can be satisfied without requiring X to be explicitly registered
|
|
188
|
+
* in the sub-route. This is how auth on the default route propagates into
|
|
189
|
+
* sub-route chains that depend on it.
|
|
190
|
+
*
|
|
191
|
+
* Dispatch priority: host+path > host-only > path-only; longer paths win ties.
|
|
192
|
+
*
|
|
193
|
+
* `requestArgIndex` tells the dispatcher which positional argument carries the request
|
|
194
|
+
* object used for host/path matching. HTTP and upgrade chains pass it at index 0;
|
|
195
|
+
* WebSocket chains pass `(ws, request, chainCompletion)` so request is at index 1.
|
|
196
|
+
* The matched (and prefix-stripped) request is substituted back into the same
|
|
197
|
+
* position before forwarding to the inner chain.
|
|
198
|
+
*/
|
|
199
|
+
export function buildRoutedChain(
|
|
200
|
+
portEntries: HttpEntry[],
|
|
201
|
+
fallback: Function,
|
|
202
|
+
onCycle?: () => void,
|
|
203
|
+
requestArgIndex: number = 0
|
|
204
|
+
): Function {
|
|
205
|
+
// Global name registry across all routes (first registration wins)
|
|
206
|
+
const nameToEntry = new Map<string, HttpEntry>();
|
|
207
|
+
for (const entry of portEntries) {
|
|
208
|
+
if (entry.name && !nameToEntry.has(entry.name)) nameToEntry.set(entry.name, entry);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Group entries by (host, normalized urlPath) so that '/api' and '/api/' coalesce.
|
|
212
|
+
type RouteGroup = { host?: string; urlPath?: string; entries: HttpEntry[] };
|
|
213
|
+
const routeGroups: RouteGroup[] = [];
|
|
214
|
+
for (const entry of portEntries) {
|
|
215
|
+
const urlPath = normalizeUrlPath(entry.urlPath);
|
|
216
|
+
const group = routeGroups.find((g) => g.host === entry.host && g.urlPath === urlPath);
|
|
217
|
+
if (group) group.entries.push(entry);
|
|
218
|
+
else routeGroups.push({ host: entry.host, urlPath, entries: [entry] });
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const defaultGroup = routeGroups.find((g) => !g.host && !g.urlPath);
|
|
222
|
+
const subRouteGroups = routeGroups.filter((g) => g.host || g.urlPath);
|
|
223
|
+
|
|
224
|
+
const subRouteChains = subRouteGroups.map((group) => {
|
|
225
|
+
const resolved = resolveDeps(group.entries, nameToEntry);
|
|
226
|
+
return { host: group.host, urlPath: group.urlPath, chain: buildLinearChain(topoSort(resolved, onCycle), fallback) };
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
subRouteChains.sort((a, b) => {
|
|
230
|
+
const aSpec = (a.host ? 2 : 0) + (a.urlPath ? 1 : 0);
|
|
231
|
+
const bSpec = (b.host ? 2 : 0) + (b.urlPath ? 1 : 0);
|
|
232
|
+
if (aSpec !== bSpec) return bSpec - aSpec;
|
|
233
|
+
return (b.urlPath?.length ?? 0) - (a.urlPath?.length ?? 0);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
const defaultChain = buildLinearChain(topoSort(defaultGroup?.entries ?? [], onCycle), fallback);
|
|
237
|
+
|
|
238
|
+
return function dispatch(...args: any[]) {
|
|
239
|
+
const request = args[requestArgIndex];
|
|
240
|
+
for (const route of subRouteChains) {
|
|
241
|
+
if (matchesRoute(request, route)) {
|
|
242
|
+
if (route.urlPath) {
|
|
243
|
+
const newArgs = args.slice();
|
|
244
|
+
newArgs[requestArgIndex] = stripPrefix(request, route.urlPath);
|
|
245
|
+
return route.chain(...newArgs);
|
|
246
|
+
}
|
|
247
|
+
return route.chain(...args);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return defaultChain(...args);
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Builds the complete middleware chain for a given port from the full responders list.
|
|
256
|
+
* Uses a flat linear chain when no sub-routes are present (fast path),
|
|
257
|
+
* or a route-dispatching chain when any entry has urlPath or host.
|
|
258
|
+
*/
|
|
259
|
+
export function makeCallbackChain(
|
|
260
|
+
responders: HttpEntry[],
|
|
261
|
+
portNum: number | string,
|
|
262
|
+
fallback: Function,
|
|
263
|
+
onCycle?: () => void,
|
|
264
|
+
requestArgIndex: number = 0
|
|
265
|
+
): Function {
|
|
266
|
+
const portEntries = responders.filter(({ port }) => port === portNum || port === 'all');
|
|
267
|
+
if (portEntries.some((e) => e.urlPath || e.host))
|
|
268
|
+
return buildRoutedChain(portEntries, fallback, onCycle, requestArgIndex);
|
|
269
|
+
return buildLinearChain(topoSort(portEntries, onCycle), fallback);
|
|
270
|
+
}
|
package/core/server/mqtt.ts
CHANGED
|
@@ -6,10 +6,10 @@ import { getSuperUser } from '../security/user.ts';
|
|
|
6
6
|
import { serializeMessage, getDeserializer } from './serverHelpers/contentTypes.ts';
|
|
7
7
|
import { recordAction, addAnalyticsListener, recordActionBinary } from '../resources/analytics/write.ts';
|
|
8
8
|
import { server } from '../server/Server.ts';
|
|
9
|
-
import { get } from '../utility/environment/environmentManager.
|
|
9
|
+
import { get } from '../utility/environment/environmentManager.ts';
|
|
10
10
|
import { CONFIG_PARAMS, AUTH_AUDIT_STATUS, AUTH_AUDIT_TYPES } from '../utility/hdbTerms.ts';
|
|
11
11
|
import { loggerWithTag } from '../utility/logging/logger.ts';
|
|
12
|
-
import { forComponent as loggerForComponent } from '../utility/logging/harper_logger.
|
|
12
|
+
import { forComponent as loggerForComponent } from '../utility/logging/harper_logger.ts';
|
|
13
13
|
import { EventEmitter } from 'events';
|
|
14
14
|
import { verifyCertificate } from '../security/certificateVerification/index.ts';
|
|
15
15
|
const authEventLog = loggerWithTag('auth-event');
|
|
@@ -23,18 +23,25 @@ export function bypassAuth() {
|
|
|
23
23
|
const authorizeLocal = (remoteAddress: string) =>
|
|
24
24
|
AUTHORIZE_LOCAL && (remoteAddress.includes('127.0.0.') || remoteAddress === '::1');
|
|
25
25
|
|
|
26
|
-
export function
|
|
26
|
+
export function handleApplication(scope: import('../components/Scope.ts').Scope) {
|
|
27
|
+
const { network, webSocket, requireAuthentication } = scope.options.getAll() as {
|
|
28
|
+
network?: any;
|
|
29
|
+
webSocket?: any;
|
|
30
|
+
requireAuthentication?: boolean;
|
|
31
|
+
};
|
|
32
|
+
const server = scope.server;
|
|
33
|
+
const { port, securePort } = network ?? {};
|
|
27
34
|
// here we basically normalize the different types of sockets to pass to our socket/message handler
|
|
28
|
-
if (!server.mqtt) {
|
|
29
|
-
server.mqtt = {
|
|
35
|
+
if (!(server as any).mqtt) {
|
|
36
|
+
(server as any).mqtt = {
|
|
30
37
|
requireAuthentication,
|
|
31
38
|
sessions: new Set(),
|
|
32
39
|
events: new EventEmitter(),
|
|
33
40
|
};
|
|
34
41
|
// a no-op error handler to prevent unhandled error events from being rethrown
|
|
35
|
-
server.mqtt.events.on('error', () => {});
|
|
42
|
+
(server as any).mqtt.events.on('error', () => {});
|
|
36
43
|
}
|
|
37
|
-
const mqttSettings = server.mqtt;
|
|
44
|
+
const mqttSettings = (server as any).mqtt;
|
|
38
45
|
function emitEvent(type: string, ...args: any[]) {
|
|
39
46
|
try {
|
|
40
47
|
mqttSettings.events.emit(type, ...args);
|
|
@@ -45,8 +52,8 @@ export function start({ server, port, network, webSocket, securePort, requireAut
|
|
|
45
52
|
let serverInstances = [];
|
|
46
53
|
const mtls = network?.mtls;
|
|
47
54
|
if (webSocket)
|
|
48
|
-
serverInstances = server.ws(
|
|
49
|
-
(ws, request, chainCompletion, next) => {
|
|
55
|
+
serverInstances = (server as any).ws(
|
|
56
|
+
(ws, request, chainCompletion, next: any) => {
|
|
50
57
|
if (request.headers.get('sec-websocket-protocol') !== 'mqtt') {
|
|
51
58
|
return next(ws, request, chainCompletion);
|
|
52
59
|
}
|
|
@@ -68,7 +75,7 @@ export function start({ server, port, network, webSocket, securePort, requireAut
|
|
|
68
75
|
mqttLog.info?.('WebSocket error', error);
|
|
69
76
|
});
|
|
70
77
|
},
|
|
71
|
-
{ ...webSocket }
|
|
78
|
+
{ ...webSocket, after: 'authentication' }
|
|
72
79
|
); // if there is no port, we are piggy-backing off of default app http server
|
|
73
80
|
// standard TCP socket
|
|
74
81
|
if (port || securePort) {
|
|
@@ -78,13 +85,13 @@ export function start({ server, port, network, webSocket, securePort, requireAut
|
|
|
78
85
|
let user;
|
|
79
86
|
emitEvent('connection', socket);
|
|
80
87
|
mqttLog.debug?.(
|
|
81
|
-
`Received ${socket.getCertificate ? 'SSL' : 'TCP'} connection for MQTT from ${socket.remoteAddress}`
|
|
88
|
+
`Received ${(socket as any).getCertificate ? 'SSL' : 'TCP'} connection for MQTT from ${socket.remoteAddress}`
|
|
82
89
|
);
|
|
83
90
|
if (mtls) {
|
|
84
|
-
if (socket.authorized) {
|
|
91
|
+
if ((socket as any).authorized) {
|
|
85
92
|
try {
|
|
86
93
|
// Perform certificate verification
|
|
87
|
-
const peerCertificate = socket.getPeerCertificate(true);
|
|
94
|
+
const peerCertificate = (socket as any).getPeerCertificate(true);
|
|
88
95
|
if (peerCertificate?.subject) {
|
|
89
96
|
const verificationResult = await verifyCertificate(peerCertificate, mtls);
|
|
90
97
|
if (!verificationResult.valid) {
|
|
@@ -102,7 +109,7 @@ export function start({ server, port, network, webSocket, securePort, requireAut
|
|
|
102
109
|
if (username !== null) {
|
|
103
110
|
// null means no user is defined from certificate, need regular authentication as well
|
|
104
111
|
if (username === undefined || username === 'Common Name' || username === 'CN')
|
|
105
|
-
username = socket.getPeerCertificate().subject.CN;
|
|
112
|
+
username = (socket as any).getPeerCertificate().subject.CN;
|
|
106
113
|
try {
|
|
107
114
|
user = await server.getUser(username, null, null);
|
|
108
115
|
if (get(CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)) {
|
|
@@ -139,7 +146,7 @@ export function start({ server, port, network, webSocket, securePort, requireAut
|
|
|
139
146
|
}
|
|
140
147
|
} else if (mtls.required) {
|
|
141
148
|
mqttLog.info?.(
|
|
142
|
-
`Unauthorized connection attempt, no authorized client certificate provided, error: ${socket.authorizationError}`
|
|
149
|
+
`Unauthorized connection attempt, no authorized client certificate provided, error: ${(socket as any).authorizationError}`
|
|
143
150
|
);
|
|
144
151
|
return socket.end();
|
|
145
152
|
}
|
|
@@ -160,7 +167,6 @@ export function start({ server, port, network, webSocket, securePort, requireAut
|
|
|
160
167
|
)
|
|
161
168
|
);
|
|
162
169
|
}
|
|
163
|
-
return serverInstances;
|
|
164
170
|
}
|
|
165
171
|
let addingMetrics,
|
|
166
172
|
numberOfConnections = 0;
|
|
@@ -195,7 +201,7 @@ function onSocket(socket, send, request, user, mqttSettings) {
|
|
|
195
201
|
numberOfConnections--;
|
|
196
202
|
if (!disconnected) {
|
|
197
203
|
disconnected = true;
|
|
198
|
-
session?.disconnect?.();
|
|
204
|
+
session?.disconnect?.(false);
|
|
199
205
|
emitEvent('disconnected', session, socket);
|
|
200
206
|
mqttSettings.sessions.delete(session);
|
|
201
207
|
recordActionBinary(false, 'connection', 'mqtt', 'disconnect');
|
|
@@ -203,7 +209,7 @@ function onSocket(socket, send, request, user, mqttSettings) {
|
|
|
203
209
|
}
|
|
204
210
|
}
|
|
205
211
|
|
|
206
|
-
parser.on('packet', async (packet) => {
|
|
212
|
+
parser.on('packet', async (packet: any) => {
|
|
207
213
|
try {
|
|
208
214
|
if (user?.then) user = await user;
|
|
209
215
|
} catch (error) {
|
|
@@ -213,14 +219,14 @@ function onSocket(socket, send, request, user, mqttSettings) {
|
|
|
213
219
|
}
|
|
214
220
|
const command = packet.cmd;
|
|
215
221
|
if (session) {
|
|
216
|
-
if (session.then) await session;
|
|
222
|
+
if ((session as any).then) await session;
|
|
217
223
|
} else if (command !== 'connect') {
|
|
218
224
|
mqttLog.info?.('Received packet before connection was established, closing connection');
|
|
219
225
|
if (socket?.destroy) socket.destroy();
|
|
220
226
|
else socket?.terminate();
|
|
221
227
|
return;
|
|
222
228
|
}
|
|
223
|
-
const topic = packet.topic;
|
|
229
|
+
const topic = (packet as any).topic;
|
|
224
230
|
const slashIndex = topic?.indexOf('/', 1);
|
|
225
231
|
const generalTopic = slashIndex > 0 ? topic.slice(0, slashIndex) : topic;
|
|
226
232
|
recordAction(packet.length, 'bytes-received', generalTopic, packetMethodName(packet), 'mqtt');
|
|
@@ -279,14 +285,16 @@ function onSocket(socket, send, request, user, mqttSettings) {
|
|
|
279
285
|
// TODO: Handle the will & testament, and possibly use the will's content type as a hint for expected content
|
|
280
286
|
if (packet.will) {
|
|
281
287
|
const deserialize =
|
|
282
|
-
socket.deserialize ||
|
|
283
|
-
|
|
288
|
+
socket.deserialize ||
|
|
289
|
+
(socket.deserialize = getDeserializer(request?.headers.get?.('content-type') as string, false));
|
|
290
|
+
(packet.will as any).data =
|
|
291
|
+
packet.will.payload?.length > 0 ? deserialize(packet.will.payload) : undefined;
|
|
284
292
|
delete packet.will.payload;
|
|
285
293
|
}
|
|
286
294
|
session = getSession({
|
|
287
295
|
user,
|
|
288
296
|
...packet,
|
|
289
|
-
});
|
|
297
|
+
} as any) as any;
|
|
290
298
|
session = await session;
|
|
291
299
|
// the session is used in the context, and we want to make sure we can access this
|
|
292
300
|
session.socket = socket;
|
|
@@ -338,12 +346,12 @@ function onSocket(socket, send, request, user, mqttSettings) {
|
|
|
338
346
|
return !rawSocket.closed;
|
|
339
347
|
} catch (error) {
|
|
340
348
|
mqttLog.error?.(error);
|
|
341
|
-
session?.disconnect();
|
|
349
|
+
session?.disconnect(false);
|
|
342
350
|
mqttSettings.sessions.delete(session);
|
|
343
351
|
return false;
|
|
344
352
|
}
|
|
345
353
|
};
|
|
346
|
-
session.setListener(listener);
|
|
354
|
+
session.setListener(listener as any);
|
|
347
355
|
if (session.sessionWasPresent) await session.resume();
|
|
348
356
|
break;
|
|
349
357
|
case 'subscribe':
|
|
@@ -407,7 +415,8 @@ function onSocket(socket, send, request, user, mqttSettings) {
|
|
|
407
415
|
const responseCmd = packet.qos === 2 ? 'pubrec' : 'puback';
|
|
408
416
|
// deserialize
|
|
409
417
|
const deserialize =
|
|
410
|
-
socket.deserialize ||
|
|
418
|
+
socket.deserialize ||
|
|
419
|
+
(socket.deserialize = getDeserializer(request?.headers.get?.('content-type') as string, false));
|
|
411
420
|
const messageLength = packet.payload?.length || 0;
|
|
412
421
|
const data = messageLength > 0 ? deserialize(packet.payload) : undefined; // zero payload length maps to a delete
|
|
413
422
|
let published;
|
package/core/server/nodeName.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { X509Certificate } from 'node:crypto';
|
|
3
3
|
import { CONFIG_PARAMS } from '../utility/hdbTerms.ts';
|
|
4
|
-
import env from '../utility/environment/environmentManager.
|
|
4
|
+
import * as env from '../utility/environment/environmentManager.ts';
|
|
5
5
|
import { logger } from '../utility/logging/logger.ts';
|
|
6
|
+
import { server } from './Server.ts';
|
|
6
7
|
|
|
7
8
|
Object.defineProperty(server, 'hostname', {
|
|
8
9
|
get() {
|
|
@@ -64,6 +65,7 @@ function getPortFromListeningPort(key: string) {
|
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
export function hostnameToUrl(hostname) {
|
|
68
|
+
if (!hostname) return undefined;
|
|
67
69
|
let port = getPortFromListeningPort('replication_port');
|
|
68
70
|
if (port) return `ws://${hostname}:${port}`;
|
|
69
71
|
port = getPortFromListeningPort('replication_secureport');
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
1
2
|
import cluster from 'cluster';
|
|
2
3
|
import zlib from 'node:zlib';
|
|
3
|
-
import env from '../utility/environment/environmentManager.
|
|
4
|
+
import * as env from '../utility/environment/environmentManager.ts';
|
|
4
5
|
env.initSync();
|
|
5
6
|
import * as terms from '../utility/hdbTerms.ts';
|
|
6
|
-
import harperLogger from '../utility/logging/harper_logger.
|
|
7
|
+
import harperLogger from '../utility/logging/harper_logger.ts';
|
|
8
|
+
import { realExit } from './threads/workerProcessGuard.ts';
|
|
7
9
|
import fastify, { FastifyInstance, FastifyReply, FastifyRequest, FastifyServerOptions } from 'fastify';
|
|
8
10
|
import fastifyCors, { type FastifyCorsOptions } from '@fastify/cors';
|
|
9
11
|
import fastifyCompress from '@fastify/compress';
|
|
@@ -11,8 +13,8 @@ import fastifyStatic from '@fastify/static';
|
|
|
11
13
|
import requestTimePlugin from './serverHelpers/requestTimePlugin.js';
|
|
12
14
|
import guidePath from 'path';
|
|
13
15
|
import { PACKAGE_ROOT } from '../utility/packageUtils.js';
|
|
14
|
-
import globalSchema from '../utility/globalSchema.
|
|
15
|
-
import commonUtils from '../utility/common_utils.
|
|
16
|
+
import * as globalSchema from '../utility/globalSchema.ts';
|
|
17
|
+
import * as commonUtils from '../utility/common_utils.ts';
|
|
16
18
|
import * as userSchema from '../security/user.ts';
|
|
17
19
|
import { server as serverRegistration, type ServerOptions } from '../server/Server.ts';
|
|
18
20
|
import {
|
|
@@ -22,12 +24,17 @@ import {
|
|
|
22
24
|
serverErrorHandler,
|
|
23
25
|
reqBodyValidationHandler,
|
|
24
26
|
} from './serverHelpers/serverHandlers.js';
|
|
27
|
+
import { registerBunFastifyInstance } from './http.ts';
|
|
25
28
|
import { registerContentHandlers } from './serverHelpers/contentTypes.ts';
|
|
29
|
+
import { getConfigObj } from '../config/configUtils.js';
|
|
30
|
+
import { registerMcpProfile } from '../components/mcp/index.ts';
|
|
26
31
|
import type { OperationFunctionName } from './serverHelpers/serverUtilities.ts';
|
|
27
|
-
|
|
32
|
+
type ParsedSqlObject = any;
|
|
28
33
|
import { generateJsonApi } from '../resources/openApi.ts';
|
|
29
34
|
import { Resources } from '../resources/Resources.ts';
|
|
30
|
-
import { ServerError } from '../utility/errors/hdbError.
|
|
35
|
+
import { ServerError } from '../utility/errors/hdbError.ts';
|
|
36
|
+
import { sendItcEvent } from './threads/itc.js';
|
|
37
|
+
import { onMessageByType } from './threads/manageThreads.js';
|
|
31
38
|
|
|
32
39
|
const DEFAULT_HEADERS_TIMEOUT = 60000;
|
|
33
40
|
const REQ_MAX_BODY_SIZE = env.get(terms.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_MAXREQUESTBODYSIZE) ?? 1024 * 1024 * 1024; //this defaults to 1GB in bytes
|
|
@@ -37,7 +44,7 @@ const { CONFIG_PARAMS } = terms;
|
|
|
37
44
|
let server;
|
|
38
45
|
|
|
39
46
|
export { operationsServer as hdbServer };
|
|
40
|
-
export { operationsServer as
|
|
47
|
+
export { operationsServer as startOnMainThread };
|
|
41
48
|
|
|
42
49
|
/**
|
|
43
50
|
* Builds a Harper server.
|
|
@@ -67,6 +74,11 @@ async function operationsServer(options: ServerOptions & { resources?: Resources
|
|
|
67
74
|
// now that server is fully loaded/ready, start listening on port provided in config settings or just use
|
|
68
75
|
// zero to wait for sockets from the main thread
|
|
69
76
|
serverRegistration.http(server.server, options);
|
|
77
|
+
// On Bun, register the Fastify instance so requests can be delegated via inject()
|
|
78
|
+
if (typeof globalThis.Bun !== 'undefined') {
|
|
79
|
+
const port = options.port || options.securePort || env.get(CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);
|
|
80
|
+
if (port) registerBunFastifyInstance(port, server);
|
|
81
|
+
}
|
|
70
82
|
if (!server.server.closeIdleConnections) {
|
|
71
83
|
// before Node v18, closeIdleConnections is not available, and we have to setup a listener for fastify
|
|
72
84
|
// to handle closing by setting up the dynamic port
|
|
@@ -81,7 +93,9 @@ async function operationsServer(options: ServerOptions & { resources?: Resources
|
|
|
81
93
|
} catch (err) {
|
|
82
94
|
console.error(`Failed to build server on ${process.pid}`, err);
|
|
83
95
|
harperLogger.fatal(err);
|
|
84
|
-
|
|
96
|
+
// Use realExit so this fatal worker bootstrap failure still terminates
|
|
97
|
+
// the worker even with the worker process guard installed.
|
|
98
|
+
realExit(1);
|
|
85
99
|
}
|
|
86
100
|
}
|
|
87
101
|
|
|
@@ -174,6 +188,24 @@ function buildServer(isHttps: boolean, resources: Resources): FastifyInstance {
|
|
|
174
188
|
});
|
|
175
189
|
registerContentHandlers(app);
|
|
176
190
|
|
|
191
|
+
// Presence-based enablement (matches Harper's `replication` convention):
|
|
192
|
+
// register iff `mcp.operations` is present in the merged config. The
|
|
193
|
+
// nested config tree from `getConfigObj()` is used directly here because
|
|
194
|
+
// Joi defaults under `mcp` are not propagated to env.get's flat map —
|
|
195
|
+
// only six hardcoded defaults are re-applied in configUtils.validateConfig.
|
|
196
|
+
const fullConfig = getConfigObj() ?? {};
|
|
197
|
+
if (fullConfig.mcp?.operations) {
|
|
198
|
+
registerMcpProfile({
|
|
199
|
+
profile: 'operations',
|
|
200
|
+
host: app,
|
|
201
|
+
config: fullConfig,
|
|
202
|
+
// Use authAndEnsureUserOnRequest (sets `req.hdb_user`) instead of
|
|
203
|
+
// authHandler (which mutates `req.body.hdb_user` — that would
|
|
204
|
+
// contaminate the JSON-RPC envelope the MCP handler reads).
|
|
205
|
+
routeOptions: { preValidation: [authAndEnsureUserOnRequest] },
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
|
|
177
209
|
// Add a simple health check
|
|
178
210
|
app.get('/health', () => 'Harper is running.');
|
|
179
211
|
|
|
@@ -204,12 +236,55 @@ function buildServer(isHttps: boolean, resources: Resources): FastifyInstance {
|
|
|
204
236
|
return app;
|
|
205
237
|
}
|
|
206
238
|
|
|
239
|
+
let nextOpenApiRequestId = 1;
|
|
240
|
+
let openApiResponseListenerAttached = false;
|
|
241
|
+
const pendingOpenApiRequests = new Map<number, (openapi: unknown) => void>();
|
|
242
|
+
|
|
243
|
+
function attachOpenApiResponseListener() {
|
|
244
|
+
if (openApiResponseListenerAttached) return;
|
|
245
|
+
onMessageByType(terms.ITC_EVENT_TYPES.RESOURCE_OPENAPI_RESPONSE, ({ message }: any) => {
|
|
246
|
+
const resolve = pendingOpenApiRequests.get(message.requestId);
|
|
247
|
+
if (resolve) {
|
|
248
|
+
pendingOpenApiRequests.delete(message.requestId);
|
|
249
|
+
resolve(message.openapi);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
openApiResponseListenerAttached = true;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
function queryWorkerForOpenApi(serverHttpURL: string): Promise<unknown> {
|
|
256
|
+
attachOpenApiResponseListener();
|
|
257
|
+
const requestId = nextOpenApiRequestId++;
|
|
258
|
+
return new Promise<unknown>((resolve, reject) => {
|
|
259
|
+
const timeoutHandle = setTimeout(() => {
|
|
260
|
+
pendingOpenApiRequests.delete(requestId);
|
|
261
|
+
reject(new ServerError('Timeout fetching OpenAPI spec from worker thread', 503));
|
|
262
|
+
}, 5000);
|
|
263
|
+
pendingOpenApiRequests.set(requestId, (openapi) => {
|
|
264
|
+
clearTimeout(timeoutHandle);
|
|
265
|
+
resolve(openapi);
|
|
266
|
+
});
|
|
267
|
+
sendItcEvent({
|
|
268
|
+
type: terms.ITC_EVENT_TYPES.RESOURCE_OPENAPI_REQUEST,
|
|
269
|
+
message: { requestId, serverHttpURL },
|
|
270
|
+
}).catch((err: unknown) => {
|
|
271
|
+
clearTimeout(timeoutHandle);
|
|
272
|
+
pendingOpenApiRequests.delete(requestId);
|
|
273
|
+
reject(err);
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
|
|
207
278
|
function restOpenAPIHandler(resources: Resources) {
|
|
208
279
|
const httpPort = env.get(terms.CONFIG_PARAMS.HTTP_PORT);
|
|
209
280
|
const httpSecurePort = env.get(terms.CONFIG_PARAMS.HTTP_SECUREPORT);
|
|
210
|
-
return (req: FastifyRequest & { hdb_user?: { role?: { permission?: { super_user: boolean } } } }) => {
|
|
281
|
+
return async (req: FastifyRequest & { hdb_user?: { role?: { permission?: { super_user: boolean } } } }) => {
|
|
211
282
|
if (req.hdb_user?.role?.permission?.super_user) {
|
|
212
|
-
|
|
283
|
+
const serverHttpURL = calculateRestHttpURL(httpPort, httpSecurePort, req);
|
|
284
|
+
if (resources.size > 0) {
|
|
285
|
+
return generateJsonApi(resources, serverHttpURL);
|
|
286
|
+
}
|
|
287
|
+
return queryWorkerForOpenApi(serverHttpURL);
|
|
213
288
|
} else {
|
|
214
289
|
harperLogger.warn(
|
|
215
290
|
`{"ip":"${req.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`
|