@harperfast/harper-pro 5.0.25 → 5.1.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.
Files changed (927) hide show
  1. package/analytics/profile.ts +4 -0
  2. package/core/AGENTS.md +92 -6
  3. package/core/DESIGN.md +24 -0
  4. package/core/README.md +11 -10
  5. package/core/agent/agent.ts +203 -0
  6. package/core/agent/loop.ts +205 -0
  7. package/core/agent/operations.ts +148 -0
  8. package/core/agent/session.ts +187 -0
  9. package/core/agent/tools/fsTools.ts +276 -0
  10. package/core/agent/tools/httpFetchTool.ts +112 -0
  11. package/core/agent/tools/scheduleTool.ts +68 -0
  12. package/core/agent/toolset.ts +43 -0
  13. package/core/agent/types.ts +85 -0
  14. package/core/benchmarks/hnsw-search.js +157 -0
  15. package/core/benchmarks/ycsb/README.md +144 -0
  16. package/core/benchmarks/ycsb/analyze-profile.mts +120 -0
  17. package/core/benchmarks/ycsb/app/config.yaml +3 -0
  18. package/core/benchmarks/ycsb/app/schema.graphql +17 -0
  19. package/core/benchmarks/ycsb/harness.mts +328 -0
  20. package/core/benchmarks/ycsb/restClient.mts +120 -0
  21. package/core/benchmarks/ycsb/run-single-node.mts +97 -0
  22. package/core/benchmarks/ycsb/to-benchmark-json.mts +58 -0
  23. package/core/benchmarks/ycsb/workload.mts +499 -0
  24. package/core/benchmarks/ycsb/workload.test.mts +174 -0
  25. package/core/bin/{BinObjects.js → BinObjects.ts} +4 -5
  26. package/core/bin/cliCredentials.ts +133 -0
  27. package/core/bin/cliOperations.ts +339 -0
  28. package/core/bin/copyDb.ts +10 -10
  29. package/core/bin/deployRenderer.ts +196 -0
  30. package/core/bin/{harper.js → harper.ts} +48 -24
  31. package/core/bin/{install.js → install.ts} +3 -3
  32. package/core/bin/lite.ts +2 -0
  33. package/core/bin/login.ts +168 -0
  34. package/core/bin/logout.ts +11 -0
  35. package/core/bin/mcp/client.ts +407 -0
  36. package/core/bin/mcp/doctor.ts +189 -0
  37. package/core/bin/mcp/index.ts +80 -0
  38. package/core/bin/mcp/options.ts +122 -0
  39. package/core/bin/mcp/printConfig.ts +89 -0
  40. package/core/bin/multipartBuilder.ts +74 -0
  41. package/core/bin/{restart.js → restart.ts} +31 -32
  42. package/core/bin/{run.js → run.ts} +57 -46
  43. package/core/bin/sseConsumer.ts +126 -0
  44. package/core/bin/{status.js → status.ts} +10 -10
  45. package/core/bin/stop.ts +21 -0
  46. package/core/bin/upgrade.js +6 -6
  47. package/core/components/Application.ts +144 -18
  48. package/core/components/ApplicationScope.ts +2 -2
  49. package/core/components/ComponentV1.ts +2 -2
  50. package/core/components/EntryHandler.ts +159 -9
  51. package/core/components/OptionsWatcher.ts +75 -11
  52. package/core/components/Scope.ts +125 -15
  53. package/core/components/anthropic/index.ts +547 -0
  54. package/core/components/bedrock/index.ts +823 -0
  55. package/core/components/componentLoader.ts +63 -32
  56. package/core/components/deployLifecycle.ts +161 -0
  57. package/core/components/deploymentOperations.ts +173 -0
  58. package/core/components/deploymentRecorder.ts +402 -0
  59. package/core/components/deriveURLPath.ts +4 -4
  60. package/core/components/mcp/adapters/fastify.ts +87 -0
  61. package/core/components/mcp/adapters/harperHttp.ts +103 -0
  62. package/core/components/mcp/audit.ts +75 -0
  63. package/core/components/mcp/index.ts +134 -0
  64. package/core/components/mcp/jsonrpc.ts +134 -0
  65. package/core/components/mcp/lifecycle.ts +105 -0
  66. package/core/components/mcp/listChanged.ts +270 -0
  67. package/core/components/mcp/rateLimit.ts +217 -0
  68. package/core/components/mcp/resources.ts +593 -0
  69. package/core/components/mcp/session.ts +151 -0
  70. package/core/components/mcp/sessionRegistry.ts +140 -0
  71. package/core/components/mcp/toolRegistry.ts +292 -0
  72. package/core/components/mcp/tools/application.ts +603 -0
  73. package/core/components/mcp/tools/operations.ts +283 -0
  74. package/core/components/mcp/tools/schemas/derive.ts +256 -0
  75. package/core/components/mcp/tools/schemas/operations.ts +245 -0
  76. package/core/components/mcp/transport.ts +517 -0
  77. package/core/components/ollama/index.ts +316 -0
  78. package/core/components/openai/index.ts +563 -0
  79. package/core/components/operations.js +211 -60
  80. package/core/components/operationsValidation.js +3 -3
  81. package/core/components/packageComponent.ts +97 -29
  82. package/core/components/requestRestart.ts +17 -2
  83. package/core/components/status/crossThread.ts +14 -5
  84. package/core/components/status/errors.ts +1 -1
  85. package/core/config/RootConfigWatcher.ts +56 -2
  86. package/core/config/configUtils.js +29 -8
  87. package/core/config/harperConfigEnvVars.ts +1 -1
  88. package/core/dataLayer/{CreateAttributeObject.js → CreateAttributeObject.ts} +4 -3
  89. package/core/dataLayer/{CreateTableObject.js → CreateTableObject.ts} +2 -1
  90. package/core/dataLayer/{DataLayerObjects.js → DataLayerObjects.ts} +17 -9
  91. package/core/dataLayer/{DeleteBeforeObject.js → DeleteBeforeObject.ts} +2 -1
  92. package/core/dataLayer/{DeleteObject.js → DeleteObject.ts} +3 -2
  93. package/core/dataLayer/{DropAttributeObject.js → DropAttributeObject.ts} +2 -1
  94. package/core/dataLayer/{GetBackupObject.js → GetBackupObject.ts} +3 -2
  95. package/core/dataLayer/{InsertObject.js → InsertObject.ts} +3 -2
  96. package/core/dataLayer/{ReadAuditLogObject.js → ReadAuditLogObject.ts} +3 -2
  97. package/core/dataLayer/{SQLSearch.js → SQLSearch.ts} +97 -43
  98. package/core/dataLayer/{SearchByConditionsObject.js → SearchByConditionsObject.ts} +5 -6
  99. package/core/dataLayer/{SearchByHashObject.js → SearchByHashObject.ts} +2 -1
  100. package/core/dataLayer/{SearchObject.js → SearchObject.ts} +2 -1
  101. package/core/dataLayer/{SqlSearchObject.js → SqlSearchObject.ts} +2 -1
  102. package/core/dataLayer/{UpdateObject.js → UpdateObject.ts} +3 -2
  103. package/core/dataLayer/{UpsertObject.js → UpsertObject.ts} +3 -2
  104. package/core/dataLayer/{bulkLoad.js → bulkLoad.ts} +40 -49
  105. package/core/dataLayer/{delete.js → delete.ts} +21 -26
  106. package/core/dataLayer/{export.js → export.ts} +22 -26
  107. package/core/dataLayer/{getBackup.js → getBackup.ts} +7 -9
  108. package/core/dataLayer/harperBridge/BridgeMethods.ts +102 -0
  109. package/core/dataLayer/harperBridge/ResourceBridge.ts +27 -26
  110. package/core/dataLayer/harperBridge/TableSizeObject.ts +1 -0
  111. package/core/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +4 -4
  112. package/core/dataLayer/harperBridge/{harperBridge.js → harperBridge.ts} +3 -3
  113. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +8 -6
  114. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +4 -4
  115. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +1 -1
  116. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +6 -4
  117. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +5 -4
  118. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +4 -4
  119. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +6 -5
  120. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +5 -4
  121. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +5 -5
  122. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +1 -1
  123. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +3 -3
  124. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +1 -1
  125. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +3 -2
  126. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +5 -5
  127. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +10 -8
  128. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +1 -1
  129. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +4 -3
  130. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +3 -3
  131. package/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +6 -5
  132. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +2 -1
  133. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +3 -2
  134. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +2 -2
  135. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +5 -4
  136. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +6 -3
  137. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.ts +1 -1
  138. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +4 -4
  139. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +5 -5
  140. package/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +4 -4
  141. package/core/dataLayer/{hdbInfoController.js → hdbInfoController.ts} +20 -26
  142. package/core/dataLayer/{insert.js → insert.ts} +24 -24
  143. package/core/dataLayer/{readAuditLog.js → readAuditLog.ts} +8 -10
  144. package/core/dataLayer/{schema.js → schema.ts} +32 -44
  145. package/core/dataLayer/{schemaDescribe.js → schemaDescribe.ts} +23 -26
  146. package/core/dataLayer/{search.js → search.ts} +9 -15
  147. package/core/dataLayer/{transaction.js → transaction.ts} +2 -5
  148. package/core/dataLayer/{update.js → update.ts} +19 -22
  149. package/core/index.ts +5 -0
  150. package/core/json/systemSchema.json +65 -0
  151. package/core/launchServiceScripts/utility/checkNodeVersion.js +2 -0
  152. package/core/package-lock.json +9051 -4318
  153. package/core/resources/DESIGN.md +98 -0
  154. package/core/resources/DatabaseTransaction.ts +58 -30
  155. package/core/resources/ErrorResource.ts +2 -1
  156. package/core/resources/LMDBTransaction.ts +38 -29
  157. package/core/resources/RecordEncoder.ts +12 -4
  158. package/core/resources/RequestTarget.ts +2 -0
  159. package/core/resources/Resource.ts +89 -56
  160. package/core/resources/ResourceInterface.ts +44 -21
  161. package/core/resources/Resources.ts +8 -8
  162. package/core/resources/RocksIndexStore.ts +3 -0
  163. package/core/resources/RocksTransactionLogStore.ts +47 -28
  164. package/core/resources/Table.ts +386 -214
  165. package/core/resources/analytics/metadata.ts +1 -0
  166. package/core/resources/analytics/read.ts +24 -6
  167. package/core/resources/analytics/write.ts +240 -17
  168. package/core/resources/auditStore.ts +28 -19
  169. package/core/resources/blob.ts +53 -53
  170. package/core/resources/dataLoader.ts +4 -4
  171. package/core/resources/databases.ts +190 -71
  172. package/core/resources/graphql.ts +227 -164
  173. package/core/resources/indexes/HierarchicalNavigableSmallWorld.ts +294 -65
  174. package/core/resources/indexes/vector.ts +17 -0
  175. package/core/resources/loadEnv.ts +21 -17
  176. package/core/resources/login.ts +5 -3
  177. package/core/resources/models/Models.ts +304 -0
  178. package/core/resources/models/TestBackend.ts +83 -0
  179. package/core/resources/models/agentLoop.ts +895 -0
  180. package/core/resources/models/analyticsTable.ts +199 -0
  181. package/core/resources/models/backendHelpers.ts +116 -0
  182. package/core/resources/models/backendRegistry.ts +66 -0
  183. package/core/resources/models/bootstrap.ts +135 -0
  184. package/core/resources/models/embedHook.ts +138 -0
  185. package/core/resources/models/types.ts +296 -0
  186. package/core/resources/replayLogs.ts +15 -7
  187. package/core/resources/roles.ts +62 -67
  188. package/core/resources/search.ts +355 -135
  189. package/core/resources/tracked.ts +8 -8
  190. package/core/resources/transaction.ts +8 -8
  191. package/core/resources/transactionBroadcast.ts +3 -3
  192. package/core/security/auth.ts +35 -26
  193. package/core/security/certificateVerification/crlVerification.ts +11 -4
  194. package/core/security/{cryptoHash.js → cryptoHash.ts} +3 -8
  195. package/core/security/data_objects/{PermissionAttributeResponseObject.js → PermissionAttributeResponseObject.ts} +4 -4
  196. package/core/security/data_objects/{PermissionResponseObject.js → PermissionResponseObject.ts} +12 -11
  197. package/core/security/data_objects/{PermissionTableResponseObject.js → PermissionTableResponseObject.ts} +6 -4
  198. package/core/security/{fastifyAuth.js → fastifyAuth.ts} +93 -20
  199. package/core/security/impersonation.ts +3 -3
  200. package/core/security/jsLoader.ts +22 -8
  201. package/core/security/{keys.js → keys.ts} +113 -121
  202. package/core/security/permissionsTranslator.js +2 -2
  203. package/core/security/{role.js → role.ts} +26 -33
  204. package/core/security/tokenAuthentication.ts +34 -7
  205. package/core/security/user.ts +26 -22
  206. package/core/server/DESIGN.md +139 -0
  207. package/core/server/DurableSubscriptionsSession.ts +67 -50
  208. package/core/server/REST.ts +120 -107
  209. package/core/server/Server.ts +31 -12
  210. package/core/server/fastifyRoutes/helpers/getCORSOptions.js +1 -1
  211. package/core/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +1 -1
  212. package/core/server/fastifyRoutes/helpers/getServerOptions.js +1 -1
  213. package/core/server/fastifyRoutes.ts +37 -33
  214. package/core/server/graphqlQuerying.ts +6 -5
  215. package/core/server/http.ts +517 -26
  216. package/core/server/itc/serverHandlers.js +75 -14
  217. package/core/server/jobs/{JobObject.js → JobObject.ts} +13 -6
  218. package/core/server/jobs/{jobProcess.js → jobProcess.ts} +20 -16
  219. package/core/server/jobs/{jobRunner.js → jobRunner.ts} +20 -21
  220. package/core/server/jobs/{jobs.js → jobs.ts} +41 -44
  221. package/core/server/loadRootComponents.js +1 -1
  222. package/core/server/middlewareChain.ts +270 -0
  223. package/core/server/mqtt.ts +35 -26
  224. package/core/server/nodeName.ts +2 -1
  225. package/core/server/operationsServer.ts +85 -10
  226. package/core/server/serverHelpers/Headers.ts +10 -8
  227. package/core/server/serverHelpers/JSONStream.ts +15 -5
  228. package/core/server/serverHelpers/Request.ts +370 -13
  229. package/core/server/serverHelpers/contentTypes.ts +42 -11
  230. package/core/server/serverHelpers/multipartParser.ts +152 -0
  231. package/core/server/serverHelpers/progressEmitter.ts +110 -0
  232. package/core/server/serverHelpers/serverHandlers.js +43 -7
  233. package/core/server/serverHelpers/serverUtilities.ts +40 -30
  234. package/core/server/static.ts +9 -6
  235. package/core/server/status/index.ts +2 -2
  236. package/core/server/storageReclamation.ts +39 -2
  237. package/core/server/threads/itc.js +7 -4
  238. package/core/server/threads/manageThreads.js +100 -26
  239. package/core/server/threads/socketRouter.ts +12 -275
  240. package/core/server/threads/threadServer.js +345 -105
  241. package/core/server/threads/workerProcessGuard.ts +93 -0
  242. package/core/server/throttle.ts +18 -0
  243. package/core/sqlTranslator/{SelectValidator.js → SelectValidator.ts} +41 -49
  244. package/core/sqlTranslator/{alasqlFunctionImporter.js → alasqlFunctionImporter.ts} +5 -5
  245. package/core/sqlTranslator/{deleteTranslator.js → deleteTranslator.ts} +13 -18
  246. package/core/sqlTranslator/{index.js → index.ts} +30 -33
  247. package/core/sqlTranslator/{sql_statement_bucket.js → sql_statement_bucket.ts} +49 -20
  248. package/core/static/README.md +10 -9
  249. package/core/system/000004.log +0 -0
  250. package/core/system/CURRENT +1 -0
  251. package/core/system/IDENTITY +1 -0
  252. package/core/system/LOCK +0 -0
  253. package/core/system/LOG +1351 -0
  254. package/core/system/MANIFEST-000005 +0 -0
  255. package/core/system/OPTIONS-000013 +607 -0
  256. package/core/system/OPTIONS-000015 +734 -0
  257. package/core/upgrade/{UpgradeObjects.js → UpgradeObjects.ts} +3 -6
  258. package/core/upgrade/directives/5-2-0.ts +49 -0
  259. package/core/upgrade/directives/{directivesController.js → directivesController.ts} +16 -16
  260. package/core/upgrade/{directivesManager.js → directivesManager.ts} +7 -11
  261. package/core/upgrade/{upgradePrompt.js → upgradePrompt.ts} +8 -14
  262. package/core/upgrade/{upgradeUtilities.js → upgradeUtilities.ts} +3 -7
  263. package/core/utility/{OperationFunctionCaller.js → OperationFunctionCaller.ts} +7 -7
  264. package/core/utility/{assignCmdEnvVariables.js → assignCmdEnvVariables.ts} +6 -8
  265. package/core/utility/{common_utils.js → common_utils.ts} +113 -139
  266. package/core/utility/environment/{environmentManager.js → environmentManager.ts} +34 -33
  267. package/core/utility/environment/systemInformation.ts +18 -4
  268. package/core/utility/errors/{commonErrors.js → commonErrors.ts} +9 -9
  269. package/core/utility/errors/{hdbError.js → hdbError.ts} +39 -45
  270. package/core/utility/expandEnvVar.ts +110 -0
  271. package/core/utility/functions/geo.js +2 -2
  272. package/core/utility/functions/sql/alaSQLExtension.js +1 -1
  273. package/core/utility/globalSchema.ts +30 -0
  274. package/core/utility/hdbTerms.ts +56 -0
  275. package/core/utility/install/checkJWTTokensExist.js +1 -1
  276. package/core/utility/install/{installer.js → installer.ts} +58 -59
  277. package/core/utility/installation.ts +2 -2
  278. package/core/utility/lmdb/{DBIDefinition.js → DBIDefinition.ts} +4 -1
  279. package/core/utility/lmdb/{DeleteRecordsResponseObject.js → DeleteRecordsResponseObject.ts} +2 -1
  280. package/core/utility/lmdb/{InsertRecordsResponseObject.js → InsertRecordsResponseObject.ts} +2 -1
  281. package/core/utility/lmdb/OpenDBIObject.ts +43 -0
  282. package/core/utility/lmdb/{OpenEnvironmentObject.js → OpenEnvironmentObject.ts} +19 -6
  283. package/core/utility/lmdb/{UpdateRecordsResponseObject.js → UpdateRecordsResponseObject.ts} +2 -1
  284. package/core/utility/lmdb/{UpsertRecordsResponseObject.js → UpsertRecordsResponseObject.ts} +2 -1
  285. package/core/utility/lmdb/{cleanLMDBMap.js → cleanLMDBMap.ts} +5 -5
  286. package/core/utility/lmdb/{commonUtility.js → commonUtility.ts} +13 -21
  287. package/core/utility/lmdb/{deleteUtility.js → deleteUtility.ts} +8 -12
  288. package/core/utility/lmdb/{environmentUtility.js → environmentUtility.ts} +43 -52
  289. package/core/utility/lmdb/{searchCursorFunctions.js → searchCursorFunctions.ts} +12 -26
  290. package/core/utility/lmdb/{searchUtility.js → searchUtility.ts} +75 -64
  291. package/core/utility/lmdb/{terms.js → terms.ts} +10 -23
  292. package/core/utility/lmdb/{writeUtility.js → writeUtility.ts} +37 -22
  293. package/core/utility/logging/{harper_logger.js → harper_logger.ts} +136 -89
  294. package/core/utility/logging/{logRotator.js → logRotator.ts} +13 -13
  295. package/core/utility/logging/logger.ts +1 -1
  296. package/core/utility/logging/{readLog.js → readLog.ts} +19 -19
  297. package/core/utility/logging/{transactionLog.js → transactionLog.ts} +10 -14
  298. package/core/utility/{mount_hdb.js → mount_hdb.ts} +15 -16
  299. package/core/utility/{npmUtilities.js → npmUtilities.ts} +14 -17
  300. package/core/utility/{operation_authorization.js → operation_authorization.ts} +173 -124
  301. package/core/utility/packageUtils.js +7 -16
  302. package/core/utility/password.ts +1 -1
  303. package/core/utility/processManagement/processManagement.js +2 -2
  304. package/core/utility/processManagement/servicesConfig.js +1 -1
  305. package/core/utility/{signalling.js → signalling.ts} +6 -11
  306. package/core/utility/watcherFallback.ts +74 -0
  307. package/core/validation/analyticsValidator.ts +43 -0
  308. package/core/validation/{bulkDeleteValidator.js → bulkDeleteValidator.ts} +5 -5
  309. package/core/validation/{check_permissions.js → check_permissions.ts} +3 -3
  310. package/core/validation/{common_validators.js → common_validators.ts} +12 -24
  311. package/core/validation/{configValidator.js → configValidator.ts} +114 -18
  312. package/core/validation/{deleteValidator.js → deleteValidator.ts} +5 -5
  313. package/core/validation/{fileLoadValidator.js → fileLoadValidator.ts} +12 -19
  314. package/core/validation/{insertValidator.js → insertValidator.ts} +5 -5
  315. package/core/validation/{installValidator.js → installValidator.ts} +8 -8
  316. package/core/validation/{readLogValidator.js → readLogValidator.ts} +10 -10
  317. package/core/validation/{role_validation.js → role_validation.ts} +26 -32
  318. package/core/validation/{schemaMetadataValidator.js → schemaMetadataValidator.ts} +5 -11
  319. package/core/validation/{searchValidator.js → searchValidator.ts} +12 -11
  320. package/core/validation/statusValidator.ts +1 -1
  321. package/core/validation/{transactionLogValidator.js → transactionLogValidator.ts} +4 -9
  322. package/core/validation/{user_validation.js → user_validation.ts} +4 -10
  323. package/core/validation/{validationWrapper.js → validationWrapper.ts} +3 -9
  324. package/dist/analytics/profile.js +4 -0
  325. package/dist/analytics/profile.js.map +1 -1
  326. package/dist/cloneNode/cloneNode.js +224 -12
  327. package/dist/cloneNode/cloneNode.js.map +1 -1
  328. package/dist/core/agent/agent.js +175 -0
  329. package/dist/core/agent/agent.js.map +1 -0
  330. package/dist/core/agent/loop.js +176 -0
  331. package/dist/core/agent/loop.js.map +1 -0
  332. package/dist/core/agent/operations.js +137 -0
  333. package/dist/core/agent/operations.js.map +1 -0
  334. package/dist/core/agent/session.js +182 -0
  335. package/dist/core/agent/session.js.map +1 -0
  336. package/dist/core/agent/tools/fsTools.js +286 -0
  337. package/dist/core/agent/tools/fsTools.js.map +1 -0
  338. package/dist/core/agent/tools/httpFetchTool.js +116 -0
  339. package/dist/core/agent/tools/httpFetchTool.js.map +1 -0
  340. package/dist/core/agent/tools/scheduleTool.js +54 -0
  341. package/dist/core/agent/tools/scheduleTool.js.map +1 -0
  342. package/dist/core/agent/toolset.js +33 -0
  343. package/dist/core/agent/toolset.js.map +1 -0
  344. package/dist/core/agent/types.js +10 -0
  345. package/dist/core/agent/types.js.map +1 -0
  346. package/dist/core/bin/BinObjects.js +6 -3
  347. package/dist/core/bin/BinObjects.js.map +1 -1
  348. package/dist/core/bin/cliCredentials.js +130 -0
  349. package/dist/core/bin/cliCredentials.js.map +1 -0
  350. package/dist/core/bin/cliOperations.js +254 -40
  351. package/dist/core/bin/cliOperations.js.map +1 -1
  352. package/dist/core/bin/copyDb.js +16 -16
  353. package/dist/core/bin/copyDb.js.map +1 -1
  354. package/dist/core/bin/deployRenderer.js +185 -0
  355. package/dist/core/bin/deployRenderer.js.map +1 -0
  356. package/dist/core/bin/harper.js +92 -31
  357. package/dist/core/bin/harper.js.map +1 -1
  358. package/dist/core/bin/install.js +41 -4
  359. package/dist/core/bin/install.js.map +1 -1
  360. package/dist/core/bin/lite.js +3 -4
  361. package/dist/core/bin/lite.js.map +1 -1
  362. package/dist/core/bin/login.js +158 -0
  363. package/dist/core/bin/login.js.map +1 -0
  364. package/dist/core/bin/logout.js +16 -0
  365. package/dist/core/bin/logout.js.map +1 -0
  366. package/dist/core/bin/mcp/client.js +395 -0
  367. package/dist/core/bin/mcp/client.js.map +1 -0
  368. package/dist/core/bin/mcp/doctor.js +193 -0
  369. package/dist/core/bin/mcp/doctor.js.map +1 -0
  370. package/dist/core/bin/mcp/index.js +81 -0
  371. package/dist/core/bin/mcp/index.js.map +1 -0
  372. package/dist/core/bin/mcp/options.js +113 -0
  373. package/dist/core/bin/mcp/options.js.map +1 -0
  374. package/dist/core/bin/mcp/printConfig.js +85 -0
  375. package/dist/core/bin/mcp/printConfig.js.map +1 -0
  376. package/dist/core/bin/multipartBuilder.js +55 -0
  377. package/dist/core/bin/multipartBuilder.js.map +1 -0
  378. package/dist/core/bin/restart.js +85 -48
  379. package/dist/core/bin/restart.js.map +1 -1
  380. package/dist/core/bin/run.js +123 -77
  381. package/dist/core/bin/run.js.map +1 -1
  382. package/dist/core/bin/sseConsumer.js +127 -0
  383. package/dist/core/bin/sseConsumer.js.map +1 -0
  384. package/dist/core/bin/status.js +48 -11
  385. package/dist/core/bin/status.js.map +1 -1
  386. package/dist/core/bin/stop.js +44 -7
  387. package/dist/core/bin/stop.js.map +1 -1
  388. package/dist/core/bin/upgrade.js +6 -6
  389. package/dist/core/components/Application.js +134 -28
  390. package/dist/core/components/Application.js.map +1 -1
  391. package/dist/core/components/ApplicationScope.js +2 -2
  392. package/dist/core/components/ComponentV1.js +5 -5
  393. package/dist/core/components/ComponentV1.js.map +1 -1
  394. package/dist/core/components/EntryHandler.js +153 -13
  395. package/dist/core/components/EntryHandler.js.map +1 -1
  396. package/dist/core/components/OptionsWatcher.js +72 -10
  397. package/dist/core/components/OptionsWatcher.js.map +1 -1
  398. package/dist/core/components/Scope.js +105 -9
  399. package/dist/core/components/Scope.js.map +1 -1
  400. package/dist/core/components/anthropic/index.js +428 -0
  401. package/dist/core/components/anthropic/index.js.map +1 -0
  402. package/dist/core/components/bedrock/index.js +734 -0
  403. package/dist/core/components/bedrock/index.js.map +1 -0
  404. package/dist/core/components/componentLoader.js +63 -38
  405. package/dist/core/components/componentLoader.js.map +1 -1
  406. package/dist/core/components/deployLifecycle.js +156 -0
  407. package/dist/core/components/deployLifecycle.js.map +1 -0
  408. package/dist/core/components/deploymentOperations.js +185 -0
  409. package/dist/core/components/deploymentOperations.js.map +1 -0
  410. package/dist/core/components/deploymentRecorder.js +401 -0
  411. package/dist/core/components/deploymentRecorder.js.map +1 -0
  412. package/dist/core/components/deriveURLPath.js +2 -2
  413. package/dist/core/components/deriveURLPath.js.map +1 -1
  414. package/dist/core/components/mcp/adapters/fastify.js +66 -0
  415. package/dist/core/components/mcp/adapters/fastify.js.map +1 -0
  416. package/dist/core/components/mcp/adapters/harperHttp.js +78 -0
  417. package/dist/core/components/mcp/adapters/harperHttp.js.map +1 -0
  418. package/dist/core/components/mcp/audit.js +73 -0
  419. package/dist/core/components/mcp/audit.js.map +1 -0
  420. package/dist/core/components/mcp/index.js +109 -0
  421. package/dist/core/components/mcp/index.js.map +1 -0
  422. package/dist/core/components/mcp/jsonrpc.js +93 -0
  423. package/dist/core/components/mcp/jsonrpc.js.map +1 -0
  424. package/dist/core/components/mcp/lifecycle.js +79 -0
  425. package/dist/core/components/mcp/lifecycle.js.map +1 -0
  426. package/dist/core/components/mcp/listChanged.js +257 -0
  427. package/dist/core/components/mcp/listChanged.js.map +1 -0
  428. package/dist/core/components/mcp/rateLimit.js +226 -0
  429. package/dist/core/components/mcp/rateLimit.js.map +1 -0
  430. package/dist/core/components/mcp/resources.js +515 -0
  431. package/dist/core/components/mcp/resources.js.map +1 -0
  432. package/dist/core/components/mcp/session.js +170 -0
  433. package/dist/core/components/mcp/session.js.map +1 -0
  434. package/dist/core/components/mcp/sessionRegistry.js +124 -0
  435. package/dist/core/components/mcp/sessionRegistry.js.map +1 -0
  436. package/dist/core/components/mcp/toolRegistry.js +176 -0
  437. package/dist/core/components/mcp/toolRegistry.js.map +1 -0
  438. package/dist/core/components/mcp/tools/application.js +549 -0
  439. package/dist/core/components/mcp/tools/application.js.map +1 -0
  440. package/dist/core/components/mcp/tools/operations.js +303 -0
  441. package/dist/core/components/mcp/tools/operations.js.map +1 -0
  442. package/dist/core/components/mcp/tools/schemas/derive.js +216 -0
  443. package/dist/core/components/mcp/tools/schemas/derive.js.map +1 -0
  444. package/dist/core/components/mcp/tools/schemas/operations.js +243 -0
  445. package/dist/core/components/mcp/tools/schemas/operations.js.map +1 -0
  446. package/dist/core/components/mcp/transport.js +467 -0
  447. package/dist/core/components/mcp/transport.js.map +1 -0
  448. package/dist/core/components/ollama/index.js +239 -0
  449. package/dist/core/components/ollama/index.js.map +1 -0
  450. package/dist/core/components/openai/index.js +475 -0
  451. package/dist/core/components/openai/index.js.map +1 -0
  452. package/dist/core/components/operations.js +198 -52
  453. package/dist/core/components/operations.js.map +1 -1
  454. package/dist/core/components/operationsValidation.js +3 -3
  455. package/dist/core/components/packageComponent.js +87 -26
  456. package/dist/core/components/packageComponent.js.map +1 -1
  457. package/dist/core/components/requestRestart.js +12 -1
  458. package/dist/core/components/requestRestart.js.map +1 -1
  459. package/dist/core/components/status/crossThread.js +12 -5
  460. package/dist/core/components/status/crossThread.js.map +1 -1
  461. package/dist/core/components/status/errors.js +7 -7
  462. package/dist/core/config/RootConfigWatcher.js +52 -1
  463. package/dist/core/config/RootConfigWatcher.js.map +1 -1
  464. package/dist/core/config/configUtils.js +31 -8
  465. package/dist/core/config/configUtils.js.map +1 -1
  466. package/dist/core/config/harperConfigEnvVars.js +1 -1
  467. package/dist/core/config/harperConfigEnvVars.js.map +1 -1
  468. package/dist/core/dataLayer/CreateAttributeObject.js +4 -3
  469. package/dist/core/dataLayer/CreateAttributeObject.js.map +1 -1
  470. package/dist/core/dataLayer/CreateTableObject.js +2 -1
  471. package/dist/core/dataLayer/CreateTableObject.js.map +1 -1
  472. package/dist/core/dataLayer/DataLayerObjects.js +19 -5
  473. package/dist/core/dataLayer/DataLayerObjects.js.map +1 -1
  474. package/dist/core/dataLayer/DeleteBeforeObject.js +2 -1
  475. package/dist/core/dataLayer/DeleteBeforeObject.js.map +1 -1
  476. package/dist/core/dataLayer/DeleteObject.js +4 -3
  477. package/dist/core/dataLayer/DeleteObject.js.map +1 -1
  478. package/dist/core/dataLayer/DropAttributeObject.js +2 -1
  479. package/dist/core/dataLayer/DropAttributeObject.js.map +1 -1
  480. package/dist/core/dataLayer/GetBackupObject.js +4 -3
  481. package/dist/core/dataLayer/GetBackupObject.js.map +1 -1
  482. package/dist/core/dataLayer/InsertObject.js +4 -3
  483. package/dist/core/dataLayer/InsertObject.js.map +1 -1
  484. package/dist/core/dataLayer/ReadAuditLogObject.js +4 -3
  485. package/dist/core/dataLayer/ReadAuditLogObject.js.map +1 -1
  486. package/dist/core/dataLayer/SQLSearch.js +140 -78
  487. package/dist/core/dataLayer/SQLSearch.js.map +1 -1
  488. package/dist/core/dataLayer/SearchByConditionsObject.js +5 -7
  489. package/dist/core/dataLayer/SearchByConditionsObject.js.map +1 -1
  490. package/dist/core/dataLayer/SearchByHashObject.js +2 -1
  491. package/dist/core/dataLayer/SearchByHashObject.js.map +1 -1
  492. package/dist/core/dataLayer/SearchObject.js +2 -1
  493. package/dist/core/dataLayer/SearchObject.js.map +1 -1
  494. package/dist/core/dataLayer/SqlSearchObject.js +2 -1
  495. package/dist/core/dataLayer/SqlSearchObject.js.map +1 -1
  496. package/dist/core/dataLayer/UpdateObject.js +4 -3
  497. package/dist/core/dataLayer/UpdateObject.js.map +1 -1
  498. package/dist/core/dataLayer/UpsertObject.js +4 -3
  499. package/dist/core/dataLayer/UpsertObject.js.map +1 -1
  500. package/dist/core/dataLayer/bulkLoad.js +122 -88
  501. package/dist/core/dataLayer/bulkLoad.js.map +1 -1
  502. package/dist/core/dataLayer/delete.js +74 -39
  503. package/dist/core/dataLayer/delete.js.map +1 -1
  504. package/dist/core/dataLayer/export.js +90 -55
  505. package/dist/core/dataLayer/export.js.map +1 -1
  506. package/dist/core/dataLayer/getBackup.js +43 -11
  507. package/dist/core/dataLayer/getBackup.js.map +1 -1
  508. package/dist/core/dataLayer/harperBridge/BridgeMethods.js +41 -20
  509. package/dist/core/dataLayer/harperBridge/BridgeMethods.js.map +1 -1
  510. package/dist/core/dataLayer/harperBridge/ResourceBridge.js +26 -25
  511. package/dist/core/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
  512. package/dist/core/dataLayer/harperBridge/TableSizeObject.js.map +1 -1
  513. package/dist/core/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +4 -4
  514. package/dist/core/dataLayer/harperBridge/harperBridge.js +38 -4
  515. package/dist/core/dataLayer/harperBridge/harperBridge.js.map +1 -1
  516. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +7 -6
  517. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js.map +1 -1
  518. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +4 -4
  519. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js.map +1 -1
  520. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +1 -1
  521. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js.map +1 -1
  522. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +5 -4
  523. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js.map +1 -1
  524. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +4 -4
  525. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js.map +1 -1
  526. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +4 -4
  527. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +5 -5
  528. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js.map +1 -1
  529. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +4 -4
  530. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js.map +1 -1
  531. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +5 -5
  532. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js.map +1 -1
  533. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +1 -1
  534. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +3 -3
  535. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +1 -1
  536. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +2 -2
  537. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js.map +1 -1
  538. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +5 -5
  539. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +8 -8
  540. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js.map +1 -1
  541. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +1 -1
  542. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +3 -3
  543. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js.map +1 -1
  544. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +3 -3
  545. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +5 -5
  546. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js.map +1 -1
  547. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +1 -1
  548. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js.map +1 -1
  549. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +2 -2
  550. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js.map +1 -1
  551. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +2 -2
  552. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +4 -4
  553. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js.map +1 -1
  554. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +5 -3
  555. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js.map +1 -1
  556. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +2 -2
  557. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +4 -4
  558. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js.map +1 -1
  559. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +5 -5
  560. package/dist/core/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +4 -4
  561. package/dist/core/dataLayer/hdbInfoController.js +66 -31
  562. package/dist/core/dataLayer/hdbInfoController.js.map +1 -1
  563. package/dist/core/dataLayer/insert.js +63 -28
  564. package/dist/core/dataLayer/insert.js.map +1 -1
  565. package/dist/core/dataLayer/readAuditLog.js +45 -13
  566. package/dist/core/dataLayer/readAuditLog.js.map +1 -1
  567. package/dist/core/dataLayer/schema.js +124 -89
  568. package/dist/core/dataLayer/schema.js.map +1 -1
  569. package/dist/core/dataLayer/schemaDescribe.js +78 -41
  570. package/dist/core/dataLayer/schemaDescribe.js.map +1 -1
  571. package/dist/core/dataLayer/search.js +12 -13
  572. package/dist/core/dataLayer/search.js.map +1 -1
  573. package/dist/core/dataLayer/transaction.js +3 -4
  574. package/dist/core/dataLayer/transaction.js.map +1 -1
  575. package/dist/core/dataLayer/update.js +53 -18
  576. package/dist/core/dataLayer/update.js.map +1 -1
  577. package/dist/core/globals.js +1 -0
  578. package/dist/core/globals.js.map +1 -1
  579. package/dist/core/index.js +4 -1
  580. package/dist/core/index.js.map +1 -1
  581. package/dist/core/json/systemSchema.json +65 -0
  582. package/dist/core/launchServiceScripts/utility/checkNodeVersion.js +3 -0
  583. package/dist/core/launchServiceScripts/utility/checkNodeVersion.js.map +1 -1
  584. package/dist/core/resources/DatabaseTransaction.js +39 -15
  585. package/dist/core/resources/DatabaseTransaction.js.map +1 -1
  586. package/dist/core/resources/ErrorResource.js +3 -1
  587. package/dist/core/resources/ErrorResource.js.map +1 -1
  588. package/dist/core/resources/LMDBTransaction.js +18 -7
  589. package/dist/core/resources/LMDBTransaction.js.map +1 -1
  590. package/dist/core/resources/RecordEncoder.js +5 -2
  591. package/dist/core/resources/RecordEncoder.js.map +1 -1
  592. package/dist/core/resources/RequestTarget.js.map +1 -1
  593. package/dist/core/resources/Resource.js +37 -10
  594. package/dist/core/resources/Resource.js.map +1 -1
  595. package/dist/core/resources/ResourceInterface.js +20 -0
  596. package/dist/core/resources/ResourceInterface.js.map +1 -1
  597. package/dist/core/resources/Resources.js +7 -6
  598. package/dist/core/resources/Resources.js.map +1 -1
  599. package/dist/core/resources/RocksIndexStore.js +3 -0
  600. package/dist/core/resources/RocksIndexStore.js.map +1 -1
  601. package/dist/core/resources/RocksTransactionLogStore.js +46 -27
  602. package/dist/core/resources/RocksTransactionLogStore.js.map +1 -1
  603. package/dist/core/resources/Table.js +267 -107
  604. package/dist/core/resources/Table.js.map +1 -1
  605. package/dist/core/resources/analytics/metadata.js +1 -0
  606. package/dist/core/resources/analytics/metadata.js.map +1 -1
  607. package/dist/core/resources/analytics/read.js +16 -5
  608. package/dist/core/resources/analytics/read.js.map +1 -1
  609. package/dist/core/resources/analytics/write.js +232 -20
  610. package/dist/core/resources/analytics/write.js.map +1 -1
  611. package/dist/core/resources/auditStore.js +13 -8
  612. package/dist/core/resources/auditStore.js.map +1 -1
  613. package/dist/core/resources/blob.js +8 -8
  614. package/dist/core/resources/blob.js.map +1 -1
  615. package/dist/core/resources/dataLoader.js +13 -13
  616. package/dist/core/resources/databases.js +160 -52
  617. package/dist/core/resources/databases.js.map +1 -1
  618. package/dist/core/resources/graphql.js +224 -174
  619. package/dist/core/resources/graphql.js.map +1 -1
  620. package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js +308 -59
  621. package/dist/core/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
  622. package/dist/core/resources/indexes/vector.js +14 -0
  623. package/dist/core/resources/indexes/vector.js.map +1 -1
  624. package/dist/core/resources/loadEnv.js +21 -18
  625. package/dist/core/resources/loadEnv.js.map +1 -1
  626. package/dist/core/resources/login.js +5 -4
  627. package/dist/core/resources/login.js.map +1 -1
  628. package/dist/core/resources/models/Models.js +265 -0
  629. package/dist/core/resources/models/Models.js.map +1 -0
  630. package/dist/core/resources/models/TestBackend.js +71 -0
  631. package/dist/core/resources/models/TestBackend.js.map +1 -0
  632. package/dist/core/resources/models/agentLoop.js +746 -0
  633. package/dist/core/resources/models/agentLoop.js.map +1 -0
  634. package/dist/core/resources/models/analyticsTable.js +166 -0
  635. package/dist/core/resources/models/analyticsTable.js.map +1 -0
  636. package/dist/core/resources/models/backendHelpers.js +109 -0
  637. package/dist/core/resources/models/backendHelpers.js.map +1 -0
  638. package/dist/core/resources/models/backendRegistry.js +54 -0
  639. package/dist/core/resources/models/backendRegistry.js.map +1 -0
  640. package/dist/core/resources/models/bootstrap.js +112 -0
  641. package/dist/core/resources/models/bootstrap.js.map +1 -0
  642. package/dist/core/resources/models/embedHook.js +127 -0
  643. package/dist/core/resources/models/embedHook.js.map +1 -0
  644. package/dist/core/resources/models/types.js +11 -0
  645. package/dist/core/resources/models/types.js.map +1 -0
  646. package/dist/core/resources/replayLogs.js +7 -1
  647. package/dist/core/resources/replayLogs.js.map +1 -1
  648. package/dist/core/resources/roles.js +67 -71
  649. package/dist/core/resources/roles.js.map +1 -1
  650. package/dist/core/resources/search.js +349 -140
  651. package/dist/core/resources/search.js.map +1 -1
  652. package/dist/core/resources/tracked.js +14 -14
  653. package/dist/core/resources/tracked.js.map +1 -1
  654. package/dist/core/resources/transaction.js +1 -1
  655. package/dist/core/resources/transaction.js.map +1 -1
  656. package/dist/core/resources/transactionBroadcast.js.map +1 -1
  657. package/dist/core/security/auth.js +34 -25
  658. package/dist/core/security/auth.js.map +1 -1
  659. package/dist/core/security/certificateVerification/crlVerification.js +7 -1
  660. package/dist/core/security/certificateVerification/crlVerification.js.map +1 -1
  661. package/dist/core/security/cryptoHash.js +37 -5
  662. package/dist/core/security/cryptoHash.js.map +1 -1
  663. package/dist/core/security/data_objects/PermissionAttributeResponseObject.js +4 -1
  664. package/dist/core/security/data_objects/PermissionAttributeResponseObject.js.map +1 -1
  665. package/dist/core/security/data_objects/PermissionResponseObject.js +15 -8
  666. package/dist/core/security/data_objects/PermissionResponseObject.js.map +1 -1
  667. package/dist/core/security/data_objects/PermissionTableResponseObject.js +6 -1
  668. package/dist/core/security/data_objects/PermissionTableResponseObject.js.map +1 -1
  669. package/dist/core/security/fastifyAuth.js +131 -22
  670. package/dist/core/security/fastifyAuth.js.map +1 -1
  671. package/dist/core/security/impersonation.js +15 -15
  672. package/dist/core/security/jsLoader.js +18 -5
  673. package/dist/core/security/jsLoader.js.map +1 -1
  674. package/dist/core/security/keys.js +160 -114
  675. package/dist/core/security/keys.js.map +1 -1
  676. package/dist/core/security/permissionsTranslator.js +2 -2
  677. package/dist/core/security/role.js +70 -35
  678. package/dist/core/security/role.js.map +1 -1
  679. package/dist/core/security/tokenAuthentication.js +57 -27
  680. package/dist/core/security/tokenAuthentication.js.map +1 -1
  681. package/dist/core/security/user.js +74 -38
  682. package/dist/core/security/user.js.map +1 -1
  683. package/dist/core/server/DurableSubscriptionsSession.js +71 -55
  684. package/dist/core/server/DurableSubscriptionsSession.js.map +1 -1
  685. package/dist/core/server/REST.js +17 -16
  686. package/dist/core/server/REST.js.map +1 -1
  687. package/dist/core/server/Server.js +1 -1
  688. package/dist/core/server/Server.js.map +1 -1
  689. package/dist/core/server/fastifyRoutes/helpers/getCORSOptions.js +1 -1
  690. package/dist/core/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +1 -1
  691. package/dist/core/server/fastifyRoutes/helpers/getServerOptions.js +1 -1
  692. package/dist/core/server/fastifyRoutes.js +34 -30
  693. package/dist/core/server/fastifyRoutes.js.map +1 -1
  694. package/dist/core/server/graphqlQuerying.js +8 -7
  695. package/dist/core/server/graphqlQuerying.js.map +1 -1
  696. package/dist/core/server/http.js +523 -47
  697. package/dist/core/server/http.js.map +1 -1
  698. package/dist/core/server/itc/serverHandlers.js +66 -15
  699. package/dist/core/server/itc/serverHandlers.js.map +1 -1
  700. package/dist/core/server/jobs/JobObject.js +53 -7
  701. package/dist/core/server/jobs/JobObject.js.map +1 -1
  702. package/dist/core/server/jobs/jobProcess.js +64 -24
  703. package/dist/core/server/jobs/jobProcess.js.map +1 -1
  704. package/dist/core/server/jobs/jobRunner.js +68 -30
  705. package/dist/core/server/jobs/jobRunner.js.map +1 -1
  706. package/dist/core/server/jobs/jobs.js +93 -61
  707. package/dist/core/server/jobs/jobs.js.map +1 -1
  708. package/dist/core/server/loadRootComponents.js +1 -1
  709. package/dist/core/server/middlewareChain.js +252 -0
  710. package/dist/core/server/middlewareChain.js.map +1 -0
  711. package/dist/core/server/mqtt.js +22 -17
  712. package/dist/core/server/mqtt.js.map +1 -1
  713. package/dist/core/server/nodeName.js +44 -13
  714. package/dist/core/server/nodeName.js.map +1 -1
  715. package/dist/core/server/operationsServer.js +106 -33
  716. package/dist/core/server/operationsServer.js.map +1 -1
  717. package/dist/core/server/serverHelpers/Headers.js +2 -0
  718. package/dist/core/server/serverHelpers/Headers.js.map +1 -1
  719. package/dist/core/server/serverHelpers/JSONStream.js +12 -3
  720. package/dist/core/server/serverHelpers/JSONStream.js.map +1 -1
  721. package/dist/core/server/serverHelpers/Request.js +370 -9
  722. package/dist/core/server/serverHelpers/Request.js.map +1 -1
  723. package/dist/core/server/serverHelpers/contentTypes.js +36 -7
  724. package/dist/core/server/serverHelpers/contentTypes.js.map +1 -1
  725. package/dist/core/server/serverHelpers/multipartParser.js +142 -0
  726. package/dist/core/server/serverHelpers/multipartParser.js.map +1 -0
  727. package/dist/core/server/serverHelpers/progressEmitter.js +103 -0
  728. package/dist/core/server/serverHelpers/progressEmitter.js.map +1 -0
  729. package/dist/core/server/serverHelpers/serverHandlers.js +38 -7
  730. package/dist/core/server/serverHelpers/serverHandlers.js.map +1 -1
  731. package/dist/core/server/serverHelpers/serverUtilities.js +97 -93
  732. package/dist/core/server/serverHelpers/serverUtilities.js.map +1 -1
  733. package/dist/core/server/static.js +8 -5
  734. package/dist/core/server/static.js.map +1 -1
  735. package/dist/core/server/status/index.js +3 -3
  736. package/dist/core/server/storageReclamation.js +68 -9
  737. package/dist/core/server/storageReclamation.js.map +1 -1
  738. package/dist/core/server/threads/itc.js +7 -4
  739. package/dist/core/server/threads/itc.js.map +1 -1
  740. package/dist/core/server/threads/manageThreads.js +110 -26
  741. package/dist/core/server/threads/manageThreads.js.map +1 -1
  742. package/dist/core/server/threads/socketRouter.js +8 -271
  743. package/dist/core/server/threads/socketRouter.js.map +1 -1
  744. package/dist/core/server/threads/threadServer.js +360 -118
  745. package/dist/core/server/threads/threadServer.js.map +1 -1
  746. package/dist/core/server/threads/workerProcessGuard.js +114 -0
  747. package/dist/core/server/threads/workerProcessGuard.js.map +1 -0
  748. package/dist/core/server/throttle.js +17 -0
  749. package/dist/core/server/throttle.js.map +1 -1
  750. package/dist/core/sqlTranslator/SelectValidator.js +86 -47
  751. package/dist/core/sqlTranslator/SelectValidator.js.map +1 -1
  752. package/dist/core/sqlTranslator/alasqlFunctionImporter.js +40 -3
  753. package/dist/core/sqlTranslator/alasqlFunctionImporter.js.map +1 -1
  754. package/dist/core/sqlTranslator/deleteTranslator.js +48 -14
  755. package/dist/core/sqlTranslator/deleteTranslator.js.map +1 -1
  756. package/dist/core/sqlTranslator/index.js +69 -30
  757. package/dist/core/sqlTranslator/index.js.map +1 -1
  758. package/dist/core/sqlTranslator/sql_statement_bucket.js +55 -13
  759. package/dist/core/sqlTranslator/sql_statement_bucket.js.map +1 -1
  760. package/dist/core/upgrade/UpgradeObjects.js +37 -4
  761. package/dist/core/upgrade/UpgradeObjects.js.map +1 -1
  762. package/dist/core/upgrade/directives/5-2-0.js +77 -0
  763. package/dist/core/upgrade/directives/5-2-0.js.map +1 -0
  764. package/dist/core/upgrade/directives/directivesController.js +52 -11
  765. package/dist/core/upgrade/directives/directivesController.js.map +1 -1
  766. package/dist/core/upgrade/directivesManager.js +53 -18
  767. package/dist/core/upgrade/directivesManager.js.map +1 -1
  768. package/dist/core/upgrade/upgradePrompt.js +65 -30
  769. package/dist/core/upgrade/upgradePrompt.js.map +1 -1
  770. package/dist/core/upgrade/upgradeUtilities.js +37 -5
  771. package/dist/core/upgrade/upgradeUtilities.js.map +1 -1
  772. package/dist/core/utility/OperationFunctionCaller.js +45 -10
  773. package/dist/core/utility/OperationFunctionCaller.js.map +1 -1
  774. package/dist/core/utility/assignCmdEnvVariables.js +8 -4
  775. package/dist/core/utility/assignCmdEnvVariables.js.map +1 -1
  776. package/dist/core/utility/common_utils.js +140 -79
  777. package/dist/core/utility/common_utils.js.map +1 -1
  778. package/dist/core/utility/environment/environmentManager.js +75 -29
  779. package/dist/core/utility/environment/environmentManager.js.map +1 -1
  780. package/dist/core/utility/environment/systemInformation.js +27 -16
  781. package/dist/core/utility/environment/systemInformation.js.map +1 -1
  782. package/dist/core/utility/errors/commonErrors.js +49 -18
  783. package/dist/core/utility/errors/commonErrors.js.map +1 -1
  784. package/dist/core/utility/errors/hdbError.js +65 -26
  785. package/dist/core/utility/errors/hdbError.js.map +1 -1
  786. package/dist/core/utility/expandEnvVar.js +113 -0
  787. package/dist/core/utility/expandEnvVar.js.map +1 -0
  788. package/dist/core/utility/functions/geo.js +2 -2
  789. package/dist/core/utility/functions/sql/alaSQLExtension.js +1 -1
  790. package/dist/core/utility/globalSchema.js +14 -11
  791. package/dist/core/utility/globalSchema.js.map +1 -1
  792. package/dist/core/utility/hdbTerms.js +56 -0
  793. package/dist/core/utility/hdbTerms.js.map +1 -1
  794. package/dist/core/utility/install/checkJWTTokensExist.js +1 -1
  795. package/dist/core/utility/install/installer.js +106 -70
  796. package/dist/core/utility/install/installer.js.map +1 -1
  797. package/dist/core/utility/installation.js +3 -3
  798. package/dist/core/utility/lmdb/DBIDefinition.js +5 -1
  799. package/dist/core/utility/lmdb/DBIDefinition.js.map +1 -1
  800. package/dist/core/utility/lmdb/DeleteRecordsResponseObject.js +2 -1
  801. package/dist/core/utility/lmdb/DeleteRecordsResponseObject.js.map +1 -1
  802. package/dist/core/utility/lmdb/InsertRecordsResponseObject.js +2 -1
  803. package/dist/core/utility/lmdb/InsertRecordsResponseObject.js.map +1 -1
  804. package/dist/core/utility/lmdb/OpenDBIObject.js +54 -6
  805. package/dist/core/utility/lmdb/OpenDBIObject.js.map +1 -1
  806. package/dist/core/utility/lmdb/OpenEnvironmentObject.js +52 -4
  807. package/dist/core/utility/lmdb/OpenEnvironmentObject.js.map +1 -1
  808. package/dist/core/utility/lmdb/UpdateRecordsResponseObject.js +2 -1
  809. package/dist/core/utility/lmdb/UpdateRecordsResponseObject.js.map +1 -1
  810. package/dist/core/utility/lmdb/UpsertRecordsResponseObject.js +2 -1
  811. package/dist/core/utility/lmdb/UpsertRecordsResponseObject.js.map +1 -1
  812. package/dist/core/utility/lmdb/cleanLMDBMap.js +44 -7
  813. package/dist/core/utility/lmdb/cleanLMDBMap.js.map +1 -1
  814. package/dist/core/utility/lmdb/commonUtility.js +46 -17
  815. package/dist/core/utility/lmdb/commonUtility.js.map +1 -1
  816. package/dist/core/utility/lmdb/deleteUtility.js +51 -16
  817. package/dist/core/utility/lmdb/deleteUtility.js.map +1 -1
  818. package/dist/core/utility/lmdb/environmentUtility.js +91 -51
  819. package/dist/core/utility/lmdb/environmentUtility.js.map +1 -1
  820. package/dist/core/utility/lmdb/searchCursorFunctions.js +46 -14
  821. package/dist/core/utility/lmdb/searchCursorFunctions.js.map +1 -1
  822. package/dist/core/utility/lmdb/searchUtility.js +91 -55
  823. package/dist/core/utility/lmdb/searchUtility.js.map +1 -1
  824. package/dist/core/utility/lmdb/terms.js +12 -22
  825. package/dist/core/utility/lmdb/terms.js.map +1 -1
  826. package/dist/core/utility/lmdb/writeUtility.js +61 -28
  827. package/dist/core/utility/lmdb/writeUtility.js.map +1 -1
  828. package/dist/core/utility/logging/harper_logger.js +176 -81
  829. package/dist/core/utility/logging/harper_logger.js.map +1 -1
  830. package/dist/core/utility/logging/logRotator.js +65 -28
  831. package/dist/core/utility/logging/logRotator.js.map +1 -1
  832. package/dist/core/utility/logging/logger.js +4 -4
  833. package/dist/core/utility/logging/readLog.js +54 -17
  834. package/dist/core/utility/logging/readLog.js.map +1 -1
  835. package/dist/core/utility/logging/transactionLog.js +51 -16
  836. package/dist/core/utility/logging/transactionLog.js.map +1 -1
  837. package/dist/core/utility/mount_hdb.js +54 -17
  838. package/dist/core/utility/mount_hdb.js.map +1 -1
  839. package/dist/core/utility/npmUtilities.js +54 -19
  840. package/dist/core/utility/npmUtilities.js.map +1 -1
  841. package/dist/core/utility/operation_authorization.js +135 -86
  842. package/dist/core/utility/operation_authorization.js.map +1 -1
  843. package/dist/core/utility/packageUtils.js +7 -17
  844. package/dist/core/utility/packageUtils.js.map +1 -1
  845. package/dist/core/utility/password.js +2 -2
  846. package/dist/core/utility/processManagement/processManagement.js +2 -2
  847. package/dist/core/utility/processManagement/servicesConfig.js +1 -1
  848. package/dist/core/utility/signalling.js +51 -16
  849. package/dist/core/utility/signalling.js.map +1 -1
  850. package/dist/core/utility/watcherFallback.js +73 -0
  851. package/dist/core/utility/watcherFallback.js.map +1 -0
  852. package/dist/core/validation/analyticsValidator.js +79 -0
  853. package/dist/core/validation/analyticsValidator.js.map +1 -0
  854. package/dist/core/validation/bulkDeleteValidator.js +49 -11
  855. package/dist/core/validation/bulkDeleteValidator.js.map +1 -1
  856. package/dist/core/validation/check_permissions.js +38 -3
  857. package/dist/core/validation/check_permissions.js.map +1 -1
  858. package/dist/core/validation/common_validators.js +62 -31
  859. package/dist/core/validation/common_validators.js.map +1 -1
  860. package/dist/core/validation/configValidator.js +189 -54
  861. package/dist/core/validation/configValidator.js.map +1 -1
  862. package/dist/core/validation/deleteValidator.js +49 -11
  863. package/dist/core/validation/deleteValidator.js.map +1 -1
  864. package/dist/core/validation/fileLoadValidator.js +67 -32
  865. package/dist/core/validation/fileLoadValidator.js.map +1 -1
  866. package/dist/core/validation/insertValidator.js +48 -10
  867. package/dist/core/validation/insertValidator.js.map +1 -1
  868. package/dist/core/validation/installValidator.js +47 -10
  869. package/dist/core/validation/installValidator.js.map +1 -1
  870. package/dist/core/validation/readLogValidator.js +60 -22
  871. package/dist/core/validation/readLogValidator.js.map +1 -1
  872. package/dist/core/validation/role_validation.js +55 -19
  873. package/dist/core/validation/role_validation.js.map +1 -1
  874. package/dist/core/validation/schemaMetadataValidator.js +11 -12
  875. package/dist/core/validation/schemaMetadataValidator.js.map +1 -1
  876. package/dist/core/validation/searchValidator.js +82 -43
  877. package/dist/core/validation/searchValidator.js.map +1 -1
  878. package/dist/core/validation/transactionLogValidator.js +52 -17
  879. package/dist/core/validation/transactionLogValidator.js.map +1 -1
  880. package/dist/core/validation/user_validation.js +38 -6
  881. package/dist/core/validation/user_validation.js.map +1 -1
  882. package/dist/core/validation/validationWrapper.js +4 -5
  883. package/dist/core/validation/validationWrapper.js.map +1 -1
  884. package/dist/licensing/usageLicensing.js +30 -21
  885. package/dist/licensing/usageLicensing.js.map +1 -1
  886. package/dist/replication/knownNodes.js +173 -39
  887. package/dist/replication/knownNodes.js.map +1 -1
  888. package/dist/replication/replicationConnection.js +441 -85
  889. package/dist/replication/replicationConnection.js.map +1 -1
  890. package/dist/replication/replicator.js +44 -26
  891. package/dist/replication/replicator.js.map +1 -1
  892. package/dist/replication/setNode.js +22 -2
  893. package/dist/replication/setNode.js.map +1 -1
  894. package/dist/replication/subscriptionManager.js +121 -9
  895. package/dist/replication/subscriptionManager.js.map +1 -1
  896. package/dist/security/certificate.js +41 -6
  897. package/dist/security/certificate.js.map +1 -1
  898. package/dist/security/sshKeyOperations.js +35 -2
  899. package/dist/security/sshKeyOperations.js.map +1 -1
  900. package/licensing/usageLicensing.ts +32 -37
  901. package/npm-shrinkwrap.json +8994 -4305
  902. package/package.json +16 -11
  903. package/replication/DESIGN.md +139 -0
  904. package/replication/knownNodes.ts +166 -43
  905. package/replication/replicationConnection.ts +475 -92
  906. package/replication/replicator.ts +42 -25
  907. package/replication/setNode.ts +28 -9
  908. package/replication/subscriptionManager.ts +138 -14
  909. package/security/certificate.ts +8 -4
  910. package/security/sshKeyOperations.ts +1 -1
  911. package/static/defaultConfig.yaml +1 -0
  912. package/studio/web/assets/{index-CmtPP0YO.js → index-COfIkCT-.js} +5 -5
  913. package/studio/web/assets/index-COfIkCT-.js.map +1 -0
  914. package/studio/web/assets/{index.lazy-C8jvGtlu.js → index.lazy-CIvl7Fj9.js} +2 -2
  915. package/studio/web/assets/{index.lazy-C8jvGtlu.js.map → index.lazy-CIvl7Fj9.js.map} +1 -1
  916. package/studio/web/assets/{profile-O0DYlJUv.js → profile-B2ZVB--r.js} +2 -2
  917. package/studio/web/assets/{profile-O0DYlJUv.js.map → profile-B2ZVB--r.js.map} +1 -1
  918. package/studio/web/assets/{status-BIlJkJby.js → status-Db6WBmhf.js} +2 -2
  919. package/studio/web/assets/{status-BIlJkJby.js.map → status-Db6WBmhf.js.map} +1 -1
  920. package/studio/web/index.html +1 -1
  921. package/core/bin/cliOperations.js +0 -159
  922. package/core/bin/lite.js +0 -5
  923. package/core/bin/stop.js +0 -21
  924. package/core/dataLayer/harperBridge/BridgeMethods.js +0 -85
  925. package/core/utility/globalSchema.js +0 -35
  926. package/core/utility/lmdb/OpenDBIObject.js +0 -31
  927. package/studio/web/assets/index-CmtPP0YO.js.map +0 -1
@@ -27,7 +27,7 @@ import {
27
27
  LATENCY_POSITION,
28
28
  } from './replicationConnection.ts';
29
29
  import { server } from '../core/server/Server.ts';
30
- import env from '../core/utility/environment/environmentManager.js';
30
+ import * as env from '../core/utility/environment/environmentManager.js';
31
31
  import * as logger from '../core/utility/logging/harper_logger.js';
32
32
  import { verifyCertificate } from '../core/security/certificateVerification/index.ts';
33
33
  export { startOnMainThread } from './subscriptionManager.ts';
@@ -97,12 +97,12 @@ export function start(options) {
97
97
  logger.notify('Starting replication server');
98
98
  if (options.hostname && !env.get('node_hostname')) {
99
99
  // for back-compat, carry this over
100
- env.setProperty('node_hostname');
100
+ env.setProperty('node_hostname', options.hostname);
101
101
  clearThisNodeName();
102
102
  }
103
103
  if (options.url && !env.get('node_url')) {
104
104
  // for back-compat, carry this over
105
- env.setProperty('node_url');
105
+ env.setProperty('node_url', options.url);
106
106
  clearThisNodeName();
107
107
  }
108
108
  if (!options.port && !options.securePort) {
@@ -152,7 +152,7 @@ export function start(options) {
152
152
  server.http(async (request, nextHandler) => {
153
153
  if (request.isWebSocket && request.headers.get('Sec-WebSocket-Protocol') === 'harperdb-replication-v1') {
154
154
  logger.debug('Incoming replication WS connection received, authorized: ' + request.authorized);
155
- const authorizationError = request._nodeRequest.socket.authorizationError;
155
+ const authorizationError = (request._nodeRequest.socket as any).authorizationError;
156
156
  if (authorizationError) {
157
157
  if (authorizationError === 'CERT_HAS_EXPIRED') {
158
158
  logger.error(
@@ -166,7 +166,7 @@ export function start(options) {
166
166
  'certificate issuer',
167
167
  request.peerCertificate.issuer,
168
168
  'did not match any available CAs',
169
- Array.from(Array.from(wsServers[0].secureContexts.values())[0].options.availableCAs.keys())
169
+ Array.from((Array.from(wsServers[0].secureContexts.values())[0] as any).options.availableCAs.keys())
170
170
  );
171
171
  }
172
172
  }
@@ -249,7 +249,7 @@ export function start(options) {
249
249
  // add a big performance penalty on connection setup
250
250
  const contextsToUpdate = new Set(wsServer.secureContexts.values());
251
251
  if (wsServer.defaultContext) contextsToUpdate.add(wsServer.defaultContext);
252
- for (const context of contextsToUpdate) {
252
+ for (const context of contextsToUpdate as Set<any>) {
253
253
  try {
254
254
  const ca = Array.from(replicationCertificateAuthorities);
255
255
  // add the replication CAs (and root CAs) to any existing CAs for the context
@@ -344,6 +344,7 @@ export function setReplicator(dbName: string, table: any, options: any) {
344
344
  // We may try to consult this to get the other nodes for back-compat
345
345
  // const { hub_routes } = getClusteringRoutes();
346
346
  table.sourcedFrom(
347
+ // @ts-expect-error: static side intentionally differs from Resource
347
348
  class Replicator extends Resource {
348
349
  /**
349
350
  * This subscribes to the other nodes. Subscription events are notifications rather than
@@ -475,7 +476,9 @@ function getSubscriptionConnection(
475
476
  (connection = new NodeReplicationConnection(connectingUrl, subscription, dbName, nodeName, authorization))
476
477
  );
477
478
  connection.connect();
478
- connection.once('finished', () => dbConnections.delete(dbName));
479
+ connection.once('finished', () => {
480
+ if (dbConnections.get(dbName) === connection) dbConnections.delete(dbName);
481
+ });
479
482
  return connection;
480
483
  }
481
484
  }
@@ -502,7 +505,7 @@ function getRetrievalConnectionByName(nodeName, subscription, dbName): NodeRepli
502
505
  return connection;
503
506
  }
504
507
 
505
- export async function sendOperationToNode(node, operation, options) {
508
+ export async function sendOperationToNode(node, operation, options?) {
506
509
  if (!options) options = {};
507
510
  options.serverName = node.name;
508
511
  const socket = await createWebSocket(getNodeURL(node), options);
@@ -590,7 +593,7 @@ export async function unsubscribeFromNode({ url, nodes, database }) {
590
593
  }
591
594
  }
592
595
 
593
- server.replication = {
596
+ (server as any).replication = {
594
597
  exportIdMapping,
595
598
  getIdOfRemoteNode,
596
599
  };
@@ -659,8 +662,8 @@ function hasExplicitlyReplicatedTable(databaseName) {
659
662
  }
660
663
  }
661
664
 
662
- export async function replicateOperation(req) {
663
- const response = { message: '' };
665
+ export async function replicateOperation(req, options?: { onPeerResult?: (result: any) => void }) {
666
+ const response: { message: string; replicated?: any[] } = { message: '' };
664
667
  if (req.replicated !== false) {
665
668
  req.replicated = false; // don't send a replicated flag to the nodes we are sending to
666
669
  logger.trace?.(
@@ -669,21 +672,35 @@ export async function replicateOperation(req) {
669
672
  'to nodes',
670
673
  server.nodes.map((node) => node.name)
671
674
  );
672
- const replicatedResults = await Promise.allSettled(
673
- server.nodes.map((node) => {
674
- // do all the nodes in parallel
675
- return sendOperationToNode(node, req);
676
- })
675
+ // Dispatch all peers in parallel. Each promise resolves to a normalized result
676
+ // (with `.node` attached), and the optional `onPeerResult` callback fires as
677
+ // each peer settles letting callers surface per-peer progress in real time
678
+ // rather than waiting for the aggregate at the end.
679
+ const onPeerResult = options?.onPeerResult;
680
+ const perPeer = server.nodes.map((node) =>
681
+ sendOperationToNode(node, req)
682
+ .then((value: any) => {
683
+ const result: any = value && typeof value === 'object' ? value : { value };
684
+ result.node = node.name;
685
+ return result;
686
+ })
687
+ .catch((reason) => ({
688
+ status: 'failed',
689
+ reason: reason?.toString?.() ?? String(reason),
690
+ node: node.name,
691
+ }))
692
+ .then((result) => {
693
+ if (onPeerResult) {
694
+ try {
695
+ onPeerResult(result);
696
+ } catch (err) {
697
+ logger.warn?.('onPeerResult callback threw; ignoring', err);
698
+ }
699
+ }
700
+ return result;
701
+ })
677
702
  );
678
- // map the settled results to the response
679
- response.replicated = replicatedResults.map((settledResult, index) => {
680
- const result =
681
- settledResult.status === 'rejected'
682
- ? { status: 'failed', reason: settledResult.reason.toString() }
683
- : settledResult.value;
684
- result.node = server.nodes[index]?.name; // add the node to the result so we know which node succeeded/failed
685
- return result;
686
- });
703
+ response.replicated = await Promise.all(perPeer);
687
704
  }
688
705
  return response;
689
706
  }
@@ -17,10 +17,13 @@ const { HTTP_STATUS_CODES } = hdbErrors;
17
17
  const validationSchema = Joi.object({
18
18
  hostname: Joi.string(),
19
19
  verify_tls: Joi.boolean(),
20
- replicates: Joi.boolean(),
20
+ replicates: Joi.alternatives().try(Joi.boolean(), Joi.object()),
21
+ sendsTo: Joi.array(),
22
+ receivesFrom: Joi.array(),
21
23
  subscriptions: Joi.array(),
22
24
  revoked_certificates: Joi.array(),
23
25
  shard: Joi.number(),
26
+ isLeader: Joi.boolean(),
24
27
  });
25
28
 
26
29
  /**
@@ -97,7 +100,7 @@ export async function setNode(req: any) {
97
100
  }
98
101
 
99
102
  // This is the record that will be added to the other nodes hdbNodes table
100
- const targetAddNodeObj = {
103
+ const targetAddNodeObj: any = {
101
104
  operation: 'add_node_back',
102
105
  hostname: getThisNodeName(),
103
106
  target_hostname: hostname,
@@ -112,6 +115,13 @@ export async function setNode(req: any) {
112
115
  targetAddNodeObj.subscriptions = req.subscriptions.map(reverseSubscription);
113
116
  } else targetAddNodeObj.subscriptions = null;
114
117
 
118
+ // Pass route exclusions to the peer with directions swapped: what LOCAL sends to PEER
119
+ // becomes what PEER receives from LOCAL, and vice versa.
120
+ if (req.sendsTo || req.receivesFrom) {
121
+ targetAddNodeObj.sendsTo = req.receivesFrom;
122
+ targetAddNodeObj.receivesFrom = req.sendsTo;
123
+ }
124
+
115
125
  if (req.hasOwnProperty('subscribe') || req.hasOwnProperty('publish')) {
116
126
  const rev = reverseSubscription(req);
117
127
  targetAddNodeObj.subscribe = rev.subscribe;
@@ -125,7 +135,7 @@ export async function setNode(req: any) {
125
135
 
126
136
  let targetNodeResponse: any;
127
137
  let targetNodeResponseError: Error;
128
- hdbLogger.debug('sending add_node_back operation', targetAddNodeObj);
138
+ hdbLogger.notify('sending add_node_back operation', targetAddNodeObj);
129
139
  try {
130
140
  targetNodeResponse = await sendOperationToNode({ url }, targetAddNodeObj, req);
131
141
  } catch (err) {
@@ -167,9 +177,11 @@ export async function setNode(req: any) {
167
177
  cert_auth = targetNodeResponse.signingCA;
168
178
  }
169
179
 
170
- const nodeRecord = { url, ca: targetNodeResponse?.usingCA };
180
+ const nodeRecord: any = { url, ca: targetNodeResponse?.usingCA };
171
181
  if (req.hostname) nodeRecord.name = req.hostname;
172
182
  if (req.subscriptions) nodeRecord.subscriptions = req.subscriptions;
183
+ else if (req.sendsTo || req.receivesFrom)
184
+ nodeRecord.replicates = { sends: true, sendsTo: req.sendsTo, receivesFrom: req.receivesFrom };
173
185
  else nodeRecord.replicates = true;
174
186
  if (req.start_time) {
175
187
  nodeRecord.start_time = typeof req.start_time === 'string' ? new Date(req.start_time).getTime() : req.start_time;
@@ -178,9 +190,13 @@ export async function setNode(req: any) {
178
190
  if (req.revoked_certificates) nodeRecord.revoked_certificates = req.revoked_certificates;
179
191
  if (targetNodeResponse?.shard !== undefined) nodeRecord.shard = targetNodeResponse.shard;
180
192
  else if (req.shard !== undefined) nodeRecord.shard = req.shard;
193
+ // isLeader is LOCAL-ONLY: it means "this peer is my leader; request a full-table copy from it".
194
+ // It must NOT be forwarded to the peer via targetAddNodeObj — doing so would cause the peer
195
+ // to treat this node as its leader and attempt to full-copy in the wrong direction.
196
+ if (req.isLeader !== undefined) nodeRecord.isLeader = req.isLeader;
181
197
 
182
198
  if (nodeRecord.replicates) {
183
- const thisNode = {
199
+ const thisNode: any = {
184
200
  url: thisUrl,
185
201
  ca: cert_auth,
186
202
  replicates: true,
@@ -212,7 +228,7 @@ export async function setNode(req: any) {
212
228
  export async function addNodeBack(req) {
213
229
  hdbLogger.trace('addNodeBack received request:', req);
214
230
 
215
- let certs = {};
231
+ let certs: any = {};
216
232
  // If the add_node req has a CSR attached, return the CA that was used to issue the CSR,
217
233
  // else return whatever CA this node is using for replication
218
234
  let originCa: string;
@@ -230,9 +246,12 @@ export async function addNodeBack(req) {
230
246
  );
231
247
  }
232
248
 
233
- const nodeRecord = { url: req.url, ca: originCa };
249
+ const nodeRecord: any = { url: req.url, ca: originCa };
234
250
  if (req.subscriptions) nodeRecord.subscriptions = req.subscriptions;
235
- else {
251
+ else if (req.sendsTo || req.receivesFrom) {
252
+ nodeRecord.replicates = { sends: true, sendsTo: req.sendsTo, receivesFrom: req.receivesFrom };
253
+ nodeRecord.subscriptions = null;
254
+ } else {
236
255
  nodeRecord.replicates = true;
237
256
  nodeRecord.subscriptions = null;
238
257
  }
@@ -243,7 +262,7 @@ export async function addNodeBack(req) {
243
262
 
244
263
  const repCa = await getReplicationCertAuth();
245
264
  if (nodeRecord.replicates) {
246
- const thisNode = {
265
+ const thisNode: any = {
247
266
  url: getThisNodeUrl(),
248
267
  ca: repCa?.certificate,
249
268
  replicates: true,
@@ -14,25 +14,25 @@ import {
14
14
  getHDBNodeTable,
15
15
  iterateRoutes,
16
16
  shouldReplicateFromNode,
17
- type Node,
18
17
  type Route,
19
18
  getNodeURL,
20
19
  } from './knownNodes.ts';
21
20
  import * as logger from '../core/utility/logging/harper_logger.js';
22
21
  import lodash from 'lodash';
23
22
  const { cloneDeep } = lodash;
24
- import env from '../core/utility/environment/environmentManager.js';
23
+ import * as env from '../core/utility/environment/environmentManager.js';
25
24
  import { CONFIG_PARAMS } from '../core/utility/hdbTerms.ts';
26
25
  import { X509Certificate } from 'crypto';
27
26
  import minimist from 'minimist';
28
27
  const cliArgs = minimist(process.argv);
29
28
 
30
29
  type ConnectedWorkerStatus = {
31
- worker: Worker | null;
30
+ worker: any;
32
31
  connected?: boolean;
33
32
  latency?: number;
34
33
  };
35
34
  type ReplicationConnectionStatus = {
35
+ url?: string;
36
36
  nodes: ({
37
37
  name: string;
38
38
  url: string;
@@ -41,9 +41,12 @@ type ReplicationConnectionStatus = {
41
41
  startTime?: number;
42
42
  endTime?: number;
43
43
  shard?: string;
44
+ subscriptions?: any;
45
+ worker?: any;
46
+ isLeader?: boolean;
44
47
  } & ConnectedWorkerStatus)[];
45
48
  } & ConnectedWorkerStatus;
46
- type DBReplicationStatusMap = Map<string, ReplicationConnectionStatus> & { iterator: any };
49
+ type DBReplicationStatusMap = Map<string, ReplicationConnectionStatus> & { iterator?: any };
47
50
 
48
51
  const NODE_SUBSCRIBE_DELAY = 200; // delay before sending node subscribe to other nodes, so operations can complete first
49
52
  // When a worker dies it may have been holding subscriptions for many (database, node) pairs.
@@ -52,8 +55,36 @@ const NODE_SUBSCRIBE_DELAY = 200; // delay before sending node subscribe to othe
52
55
  // caused the OOM in the first place. We stagger the re-subscriptions in time so the new
53
56
  // worker(s) absorb them gradually.
54
57
  const WORKER_EXIT_REASSIGN_STAGGER_MS = 100;
58
+ // Cadence of the per-process safety-net reconcile that rebinds subscriptions whose
59
+ // worker no longer exists. Pure read-side filter against `workers` and
60
+ // `connectionReplicationMap` on each tick when nothing is wrong, so a short interval
61
+ // is cheap. Sized for the deploy-time rapid-restart-storm pattern (stacked
62
+ // `restart_http_workers` at ~1.5s spacing under live write traffic), where the per-
63
+ // worker exit chain races against shutdown and silently drops half the subscription
64
+ // assignments — this is the user-visible recovery latency for the resulting drift.
65
+ const RECONCILE_INTERVAL_MS = 5_000;
55
66
  let nextWorkerExitReassignAt = 0;
56
67
  const connectionReplicationMap = new Map<string, DBReplicationStatusMap>();
68
+ // Returns the set of node URLs whose replication entries either point at a worker no longer
69
+ // in the supplied http pool, OR have no worker assigned at all while live workers exist.
70
+ // The second case covers "all workers were down at registration time" — onDatabase stores
71
+ // `worker: undefined` when httpWorkers is empty, and without this the entry would never
72
+ // get reassigned once workers came back. Pure helper so the reconcile pass below — and its
73
+ // unit tests — can verify the broken-chain detection without spinning up real workers.
74
+ export function findStaleNodeUrls(connectionMap: Map<string, DBReplicationStatusMap>, httpWorkers: any[]): Set<string> {
75
+ const staleNodeUrls = new Set<string>();
76
+ // No live workers to reassign to — flagging here would cause endless no-op reassignments.
77
+ if (httpWorkers.length === 0) return staleNodeUrls;
78
+ for (const [url, dbReplicationWorkers] of connectionMap) {
79
+ for (const entry of dbReplicationWorkers.values()) {
80
+ if (!entry.worker || !httpWorkers.includes(entry.worker)) {
81
+ staleNodeUrls.add(url);
82
+ break;
83
+ }
84
+ }
85
+ }
86
+ return staleNodeUrls;
87
+ }
57
88
  export let disconnectedFromNode; // this is set by thread to handle when a node is disconnected (or notify main thread so it can handle)
58
89
  export let connectedToNode; // this is set by thread to handle when a node is connected (or notify main thread so it can handle)
59
90
  const nodeMap = new Map(); // this is a map of all nodes that are available to connect to
@@ -71,7 +102,7 @@ export async function startOnMainThread(options) {
71
102
  for (const tableName in database) {
72
103
  const table = database[tableName];
73
104
  if (table.auditStore) {
74
- selfCatchupOfDatabase.set(dbName, lastTimeInAuditStore(table.auditStore));
105
+ selfCatchupOfDatabase.set(dbName, lastTimeInAuditStore(table.auditStore) as number);
75
106
  break;
76
107
  }
77
108
  }
@@ -102,7 +133,7 @@ export async function startOnMainThread(options) {
102
133
  }
103
134
  }
104
135
  if (getHDBNodeTable().primaryStore.get(thisName)) ensureThisNode(); // if this node record already exists, check for config changes
105
- for (const route of iterateRoutes(options)) {
136
+ for (const route of iterateRoutes(options) as any) {
106
137
  try {
107
138
  const replicateAll = !route.subscriptions;
108
139
  if (replicateAll) {
@@ -143,6 +174,7 @@ export async function startOnMainThread(options) {
143
174
  logger.info('Setting up node replication for', node);
144
175
  if (!node) {
145
176
  // deleted node
177
+ nodeMap.delete(hostname);
146
178
  for (const [url, dbReplicationWorkers] of connectionReplicationMap) {
147
179
  let foundNode;
148
180
  for (const [_database, { nodes }] of dbReplicationWorkers) {
@@ -170,7 +202,16 @@ export async function startOnMainThread(options) {
170
202
  if (isSelf) return;
171
203
  let dbReplicationWorkers = connectionReplicationMap.get(getNodeURL(node));
172
204
  if (dbReplicationWorkers) dbReplicationWorkers.iterator.remove(); // we need to remove the old iterator so we can create a new one
173
- if (!(node.replicates === true || node.replicates?.sends) && !node.subscriptions?.length && !dbReplicationWorkers)
205
+ if (
206
+ !(
207
+ node.replicates === true ||
208
+ node.replicates?.sends ||
209
+ node.replicates?.sendsTo?.length ||
210
+ node.replicates?.receivesFrom?.length
211
+ ) &&
212
+ !node.subscriptions?.length &&
213
+ !dbReplicationWorkers
214
+ )
174
215
  return; // we don't have any subscriptions and we haven't connected yet, so just return
175
216
  logger.info(`Added node ${node.name} at ${getNodeURL(node)} for process ${getThisNodeName()}`);
176
217
  if (node.replicates && node.subscriptions) {
@@ -211,12 +252,37 @@ export async function startOnMainThread(options) {
211
252
  }
212
253
  }
213
254
  }
255
+ // When this peer is our leader, bootstrap subscriptions for configured databases
256
+ // that don't exist locally yet — they need a full-table copy from the leader.
257
+ // forEachReplicatedDatabase above only iterates local databases, so an empty node
258
+ // joining a populated leader would never schedule the catchup without this.
259
+ if (node.isLeader && Array.isArray(options?.databases)) {
260
+ for (const dbConfig of options.databases) {
261
+ const databaseName = typeof dbConfig === 'string' ? dbConfig : dbConfig?.name;
262
+ if (databaseName && !databases[databaseName]) {
263
+ logger.warn(
264
+ `isLeader: bootstrapping full-copy subscription for non-existent database ${databaseName} from ${node.name}`
265
+ );
266
+ onDatabase(databaseName, true);
267
+ }
268
+ }
269
+ }
214
270
 
215
271
  function onDatabase(databaseName, tablesReplicateByDefault) {
216
272
  logger.trace('Setting up replication for database', databaseName, 'on node', node.name);
217
- const existingEntry = dbReplicationWorkers.get(databaseName);
273
+ let existingEntry = dbReplicationWorkers.get(databaseName);
218
274
  let worker;
219
- const nodes = [{ replicateByDefault: tablesReplicateByDefault, ...node }];
275
+ // Find the matching route config for this peer so we can pass its receivesFrom/sendsTo
276
+ // exclusions to the worker thread (via the node subscription payload). For dynamic
277
+ // routes (add_node), fall back to the node's own hdb_nodes replicates object.
278
+ const matchingRoute = routes.find((r) => r.name === node.name);
279
+ const routeReplicates =
280
+ typeof matchingRoute?.replicates === 'object'
281
+ ? matchingRoute.replicates
282
+ : node.replicates && typeof node.replicates === 'object'
283
+ ? node.replicates
284
+ : null;
285
+ const nodes = [{ replicateByDefault: tablesReplicateByDefault, ...node, routeReplicates }];
220
286
  // Self catchup is done in case we have replicated any records that weren't actually written to our storage
221
287
  // before a crash.
222
288
  if (selfCatchupOfDatabase.has(databaseName) && env.get(CONFIG_PARAMS.REPLICATION_FAILOVER)) {
@@ -233,6 +299,18 @@ export async function startOnMainThread(options) {
233
299
  }
234
300
  const shouldSubscribe = shouldReplicateFromNode(node, databaseName);
235
301
  const httpWorkers = workers.filter((worker) => worker.name === 'http');
302
+ // Defensively detect entries that point at a worker no longer in the http pool.
303
+ // This happens when the worker.on('exit') handler below never fired (hung WebSocket
304
+ // refs blocking exit), the identity check rejected the reassignment, or its
305
+ // setTimeout retry was lost. We also catch the case where the entry has no worker
306
+ // assigned at all (all workers were down at registration time) so it gets rebound
307
+ // once workers come back. Without these checks, the early-return branch keeps the
308
+ // entry stuck and the subscription never recovers.
309
+ if (existingEntry && httpWorkers.length > 0 && !httpWorkers.includes(existingEntry.worker as any)) {
310
+ logger.warn(`Subscription for ${databaseName} on node ${node.name} has no live worker; reassigning`);
311
+ dbReplicationWorkers.delete(databaseName);
312
+ existingEntry = undefined;
313
+ }
236
314
  if (existingEntry) {
237
315
  worker = existingEntry.worker;
238
316
  existingEntry.nodes = nodes;
@@ -268,6 +346,12 @@ export async function startOnMainThread(options) {
268
346
  cliArgs.HDB_LEADER_URL ?? // first see if there was a leader explicitly specified
269
347
  process.env.HDB_LEADER_URL ??
270
348
  routes[0]?.url; // if we have routes, use the first one
349
+ // Track whether the leader is explicitly configured (env/cli/routes). The
350
+ // fallback "first other node in hdb_nodes" is only a guess and must NOT be
351
+ // treated as authoritative — otherwise a bidirectional add_node handshake
352
+ // where the responder has no leader config will incorrectly mark the
353
+ // requester as its leader and trigger a reverse full-table copy.
354
+ const hasExplicitLeader = !!leaderUrl;
271
355
 
272
356
  let leaderName = leaderUrl
273
357
  ? new URL(leaderUrl).hostname
@@ -278,7 +362,13 @@ export async function startOnMainThread(options) {
278
362
  )[0]; // try to find the first node
279
363
  const nodeName = nodes[0].name ?? (nodes[0].url && new URL(nodes[0].url).hostname);
280
364
  logger.warn(`Setting up subscription with leader ${leaderName} for node ${nodeName}`);
281
- nodes[0].isLeader = !leaderName || nodeName === leaderName;
365
+ // isLeader is true only if:
366
+ // 1. it was explicitly persisted (e.g. by add_node { isLeader: true }), OR
367
+ // 2. there is no leader candidate at all, OR
368
+ // 3. an explicitly configured leader (env/cli/routes) matches this node.
369
+ // We deliberately do NOT honour nodeName === leaderName when leaderName came
370
+ // from the "first other node in hdb_nodes" fallback — that's just a guess.
371
+ nodes[0].isLeader = nodes[0].isLeader || !leaderName || (hasExplicitLeader && nodeName === leaderName);
282
372
  nodes[0].url ??= getNodeURL(nodes[0]);
283
373
  setTimeout(() => {
284
374
  const request = {
@@ -353,8 +443,16 @@ export async function startOnMainThread(options) {
353
443
  // if failover is disabled, immediately return
354
444
  return;
355
445
  }
356
- const mainNode = existingWorkerEntry.nodes[0];
357
- if (!(mainNode.replicates === true || mainNode.replicates?.sends || mainNode.subscriptions?.length)) {
446
+ const mainNode: any = existingWorkerEntry.nodes[0];
447
+ if (
448
+ !(
449
+ mainNode.replicates === true ||
450
+ mainNode.replicates?.sends ||
451
+ mainNode.replicates?.sendsTo?.length ||
452
+ mainNode.replicates?.receivesFrom?.length ||
453
+ mainNode.subscriptions?.length
454
+ )
455
+ ) {
358
456
  // no replication, so just return
359
457
  return;
360
458
  }
@@ -462,7 +560,7 @@ export async function startOnMainThread(options) {
462
560
  }
463
561
  }
464
562
  };
465
- function connectToNextWorker(node: Node, database: string, connectingNode = node) {
563
+ function connectToNextWorker(node: any, database: string, connectingNode = node) {
466
564
  const httpWorkers = workers.filter((worker: any) => worker.name === 'http');
467
565
  nextWorkerIndex = nextWorkerIndex % httpWorkers.length; // wrap around as necessary
468
566
  const worker = httpWorkers[nextWorkerIndex++];
@@ -478,6 +576,32 @@ export async function startOnMainThread(options) {
478
576
  });
479
577
  } else subscribeToNode({ url: getNodeURL(connectingNode), name: connectingNode.name, database, nodes: [node] });
480
578
  }
579
+ // Periodic safety net for stale subscription entries. The existing per-database
580
+ // worker.on('exit') chain reassigns to a healthy worker after a worker dies, but a
581
+ // single broken link in that chain (identity check failing, setTimeout retry being
582
+ // lost under load, shouldSubscribe early-return pinning to a dead worker before
583
+ // the defensive check was added) used to leave the entry permanently pointing at
584
+ // an exited worker, silently breaking outbound replication for the lifetime of the
585
+ // process. This reconciles independently of the chain so the broken-state node
586
+ // can never get stuck.
587
+ function reconcileWorkers() {
588
+ const httpWorkers = workers.filter((worker) => worker.name === 'http');
589
+ const staleNodeUrls = findStaleNodeUrls(connectionReplicationMap, httpWorkers);
590
+ if (staleNodeUrls.size === 0) return;
591
+ logger.warn(
592
+ 'Reconciling replication subscriptions for nodes pointing at exited workers:',
593
+ Array.from(staleNodeUrls)
594
+ );
595
+ for (const node of nodeMap.values()) {
596
+ if (!staleNodeUrls.has(getNodeURL(node))) continue;
597
+ try {
598
+ onNodeUpdate(node);
599
+ } catch (error) {
600
+ logger.error('Error reconciling node', node?.name, error);
601
+ }
602
+ }
603
+ }
604
+ setInterval(reconcileWorkers, RECONCILE_INTERVAL_MS).unref();
481
605
  onMessageByType('disconnected-from-node', disconnectedFromNode);
482
606
  onMessageByType('connected-to-node', connectedToNode);
483
607
  onMessageByType('request-cluster-status', requestClusterStatus);
@@ -489,7 +613,7 @@ export async function startOnMainThread(options) {
489
613
  * @param message
490
614
  * @param port
491
615
  */
492
- export function requestClusterStatus(message, port) {
616
+ export function requestClusterStatus(message?, port?) {
493
617
  const connections = [];
494
618
  for (const [node_name, node] of nodeMap) {
495
619
  try {
@@ -18,7 +18,7 @@ import {
18
18
  getPrimaryHostName,
19
19
  setCertTable,
20
20
  } from '../core/security/keys.js';
21
- import env from '../core/utility/environment/environmentManager.js';
21
+ import * as env from '../core/utility/environment/environmentManager.js';
22
22
  import { LICENSE_KEY_DIR_NAME } from '../core/utility/hdbTerms.ts';
23
23
  import harperLogger from '../core/utility/logging/harper_logger.js';
24
24
  import { getThisNodeName } from '../core/server/nodeName.ts';
@@ -36,7 +36,7 @@ const fileExists = async (path: string): Promise<boolean> =>
36
36
  .catch(() => false);
37
37
 
38
38
  export async function signCertificate(req) {
39
- const response = {};
39
+ const response: any = {};
40
40
  const hdbKeysDir = join(env.getHdbBasePath(), LICENSE_KEY_DIR_NAME);
41
41
 
42
42
  if (req.csr) {
@@ -117,7 +117,11 @@ export async function createCsr() {
117
117
  const hdbKeysDir = join(env.getHdbBasePath(), LICENSE_KEY_DIR_NAME);
118
118
  let opsCert, opsPrivateKey, certName, privateKeyName;
119
119
  for await (const cert of certificateTable.search([])) {
120
- if (cert.is_self_signed && (cert.details?.issuer?.includes('Harper-Certificate-Authority') || cert.details?.issuer?.includes('HarperDB-Certificate-Authority'))) {
120
+ if (
121
+ cert.is_self_signed &&
122
+ (cert.details?.issuer?.includes('Harper-Certificate-Authority') ||
123
+ cert.details?.issuer?.includes('HarperDB-Certificate-Authority'))
124
+ ) {
121
125
  // privateKeys Map is populated from config-referenced paths only, so a Harper CA key
122
126
  // on disk but not referenced in config won't appear there — fall back to reading it.
123
127
  let key: string | Buffer | undefined = privateKeys.get(cert.private_key_name);
@@ -361,7 +365,7 @@ async function removeCertificate(req: { name: string }): Promise<{ message: stri
361
365
  );
362
366
 
363
367
  // Only delete the key file if this is the only cert referencing it.
364
- if (matchingKeys.length === 1 && matchingKeys[0].name === name) {
368
+ if (matchingKeys.length === 1 && (matchingKeys[0] as any).name === name) {
365
369
  try {
366
370
  logger.info?.('Removing private key named', private_key_name);
367
371
  await unlink(join(env.getHdbBasePath(), LICENSE_KEY_DIR_NAME, private_key_name));
@@ -6,7 +6,7 @@ import { validateBySchema } from '../core/validation/validationWrapper.js';
6
6
  import harperLogger from '../core/utility/logging/harper_logger.js';
7
7
  import { ClientError } from '../core/utility/errors/hdbError.js';
8
8
  import { CONFIG_PARAMS } from '../core/utility/hdbTerms.ts';
9
- import env from '../core/utility/environment/environmentManager.js';
9
+ import * as env from '../core/utility/environment/environmentManager.js';
10
10
  import { replicateOperation } from '../replication/replicator.ts';
11
11
 
12
12
  // SSH key name can only be alphanumeric, dash and underscores
@@ -22,6 +22,7 @@ authentication:
22
22
  refreshTokenTimeout: 30d
23
23
  analytics:
24
24
  aggregatePeriod: 60
25
+ profiling: true
25
26
  replicate: false
26
27
  applications:
27
28
  lockdown: freeze-after-load