@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/bin/BinObjects.js +17 -0
  2. package/bin/cliOperations.js +157 -0
  3. package/bin/copyDb.ts +280 -0
  4. package/bin/harper.js +156 -0
  5. package/bin/install.js +15 -0
  6. package/bin/lite.js +5 -0
  7. package/bin/restart.js +201 -0
  8. package/bin/run.js +409 -0
  9. package/bin/status.js +65 -0
  10. package/bin/stop.js +22 -0
  11. package/bin/upgrade.js +134 -0
  12. package/components/Application.ts +646 -0
  13. package/components/ApplicationScope.ts +49 -0
  14. package/components/Component.ts +53 -0
  15. package/components/ComponentV1.ts +342 -0
  16. package/components/DEFAULT_CONFIG.ts +18 -0
  17. package/components/EntryHandler.ts +227 -0
  18. package/components/Logger.ts +14 -0
  19. package/components/OptionsWatcher.ts +354 -0
  20. package/components/PluginModule.ts +6 -0
  21. package/components/Scope.ts +329 -0
  22. package/components/componentLoader.ts +529 -0
  23. package/components/deriveCommonPatternBase.ts +31 -0
  24. package/components/deriveGlobOptions.ts +44 -0
  25. package/components/deriveURLPath.ts +57 -0
  26. package/components/operations.js +658 -0
  27. package/components/operationsValidation.js +246 -0
  28. package/components/packageComponent.ts +39 -0
  29. package/components/requestRestart.ts +26 -0
  30. package/components/resolveBaseURLPath.ts +38 -0
  31. package/components/status/ComponentStatus.ts +110 -0
  32. package/components/status/ComponentStatusRegistry.ts +251 -0
  33. package/components/status/api.ts +153 -0
  34. package/components/status/crossThread.ts +405 -0
  35. package/components/status/errors.ts +152 -0
  36. package/components/status/index.ts +44 -0
  37. package/components/status/internal.ts +65 -0
  38. package/components/status/registry.ts +12 -0
  39. package/components/status/types.ts +96 -0
  40. package/config/RootConfigWatcher.ts +59 -0
  41. package/config/configHelpers.ts +11 -0
  42. package/config/configUtils.js +967 -0
  43. package/config/harperConfigEnvVars.ts +641 -0
  44. package/dataLayer/CreateAttributeObject.js +25 -0
  45. package/dataLayer/CreateTableObject.js +11 -0
  46. package/dataLayer/DataLayerObjects.js +43 -0
  47. package/dataLayer/DeleteBeforeObject.js +22 -0
  48. package/dataLayer/DeleteObject.js +25 -0
  49. package/dataLayer/DropAttributeObject.js +11 -0
  50. package/dataLayer/GetBackupObject.js +22 -0
  51. package/dataLayer/InsertObject.js +24 -0
  52. package/dataLayer/ReadAuditLogObject.js +24 -0
  53. package/dataLayer/SQLSearch.js +1335 -0
  54. package/dataLayer/SearchByConditionsObject.js +61 -0
  55. package/dataLayer/SearchByHashObject.js +21 -0
  56. package/dataLayer/SearchObject.js +45 -0
  57. package/dataLayer/SqlSearchObject.js +14 -0
  58. package/dataLayer/UpdateObject.js +23 -0
  59. package/dataLayer/UpsertObject.js +23 -0
  60. package/dataLayer/bulkLoad.js +813 -0
  61. package/dataLayer/dataObjects/BulkLoadObjects.js +27 -0
  62. package/dataLayer/dataObjects/UpsertObject.js +23 -0
  63. package/dataLayer/delete.js +164 -0
  64. package/dataLayer/export.js +381 -0
  65. package/dataLayer/getBackup.js +40 -0
  66. package/dataLayer/harperBridge/BridgeMethods.js +81 -0
  67. package/dataLayer/harperBridge/ResourceBridge.ts +633 -0
  68. package/dataLayer/harperBridge/bridgeUtility/insertUpdateReturnObj.js +28 -0
  69. package/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +88 -0
  70. package/dataLayer/harperBridge/harperBridge.js +21 -0
  71. package/dataLayer/harperBridge/lmdbBridge/LMDBBridge.js +119 -0
  72. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +19 -0
  73. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +112 -0
  74. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +67 -0
  75. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +31 -0
  76. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +94 -0
  77. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +98 -0
  78. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +89 -0
  79. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +109 -0
  80. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +107 -0
  81. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +137 -0
  82. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +35 -0
  83. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +111 -0
  84. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +28 -0
  85. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +29 -0
  86. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +207 -0
  87. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +156 -0
  88. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +21 -0
  89. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +30 -0
  90. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbTransaction.js +19 -0
  91. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +64 -0
  92. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +70 -0
  93. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +22 -0
  94. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBDeleteTransactionObject.js +23 -0
  95. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBInsertTransactionObject.js +22 -0
  96. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBTransactionObject.js +23 -0
  97. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpdateTransactionObject.js +24 -0
  98. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpsertTransactionObject.js +24 -0
  99. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +25 -0
  100. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +21 -0
  101. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +157 -0
  102. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +94 -0
  103. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +39 -0
  104. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +34 -0
  105. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +100 -0
  106. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +371 -0
  107. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +109 -0
  108. package/dataLayer/hdbInfoController.js +254 -0
  109. package/dataLayer/insert.js +266 -0
  110. package/dataLayer/readAuditLog.js +59 -0
  111. package/dataLayer/schema.js +366 -0
  112. package/dataLayer/schemaDescribe.js +289 -0
  113. package/dataLayer/search.js +60 -0
  114. package/dataLayer/transaction.js +17 -0
  115. package/dataLayer/update.js +124 -0
  116. package/dist/components/Logger.d.ts +12 -0
  117. package/dist/components/Logger.js +3 -0
  118. package/dist/components/Logger.js.map +1 -0
  119. package/dist/components/Scope.d.ts +14 -4
  120. package/dist/components/Scope.js +18 -10
  121. package/dist/components/Scope.js.map +1 -1
  122. package/dist/components/componentLoader.js +16 -9
  123. package/dist/components/componentLoader.js.map +1 -1
  124. package/dist/components/operations.js +2 -2
  125. package/dist/components/operations.js.map +1 -1
  126. package/dist/config/configUtils.d.ts +1 -1
  127. package/dist/config/configUtils.js +1 -1
  128. package/dist/config/configUtils.js.map +1 -1
  129. package/dist/dataLayer/CreateTableObject.d.ts +2 -2
  130. package/dist/dataLayer/CreateTableObject.js +2 -2
  131. package/dist/dataLayer/CreateTableObject.js.map +1 -1
  132. package/dist/dataLayer/delete.d.ts +1 -1
  133. package/dist/dataLayer/schema.js +6 -5
  134. package/dist/dataLayer/schema.js.map +1 -1
  135. package/dist/dataLayer/schemaDescribe.js +1 -1
  136. package/dist/dataLayer/schemaDescribe.js.map +1 -1
  137. package/dist/index.d.ts +1 -1
  138. package/dist/index.js +2 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/resources/DatabaseTransaction.d.ts +1 -1
  141. package/dist/resources/IterableEventQueue.d.ts +1 -1
  142. package/dist/resources/LMDBTransaction.d.ts +5 -1
  143. package/dist/resources/Resource.d.ts +1 -1
  144. package/dist/resources/RocksIndexStore.d.ts +3 -3
  145. package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
  146. package/dist/resources/Table.d.ts +15 -6
  147. package/dist/resources/Table.js +4 -1
  148. package/dist/resources/Table.js.map +1 -1
  149. package/dist/resources/analytics/read.js +32 -22
  150. package/dist/resources/analytics/read.js.map +1 -1
  151. package/dist/resources/analytics/write.js +3 -6
  152. package/dist/resources/analytics/write.js.map +1 -1
  153. package/dist/resources/auditStore.d.ts +3 -3
  154. package/dist/resources/blob.d.ts +25 -2
  155. package/dist/resources/databases.d.ts +12 -2
  156. package/dist/resources/databases.js +22 -19
  157. package/dist/resources/databases.js.map +1 -1
  158. package/dist/resources/search.js +11 -5
  159. package/dist/resources/search.js.map +1 -1
  160. package/dist/resources/transaction.d.ts +2 -1
  161. package/dist/security/auth.js +1 -1
  162. package/dist/security/auth.js.map +1 -1
  163. package/dist/security/cryptoHash.d.ts +2 -2
  164. package/dist/security/jsLoader.js +243 -66
  165. package/dist/security/jsLoader.js.map +1 -1
  166. package/dist/security/keys.js +4 -5
  167. package/dist/security/keys.js.map +1 -1
  168. package/dist/security/user.js +3 -3
  169. package/dist/security/user.js.map +1 -1
  170. package/dist/server/REST.js +16 -2
  171. package/dist/server/REST.js.map +1 -1
  172. package/dist/server/Server.d.ts +2 -1
  173. package/dist/server/Server.js.map +1 -1
  174. package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
  175. package/dist/server/fastifyRoutes.js +2 -0
  176. package/dist/server/fastifyRoutes.js.map +1 -1
  177. package/dist/server/http.js +12 -6
  178. package/dist/server/http.js.map +1 -1
  179. package/dist/server/jobs/JobObject.d.ts +3 -3
  180. package/dist/server/loadRootComponents.js +1 -0
  181. package/dist/server/loadRootComponents.js.map +1 -1
  182. package/dist/server/operationsServer.js +3 -1
  183. package/dist/server/operationsServer.js.map +1 -1
  184. package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
  185. package/dist/server/serverHelpers/Request.d.ts +5 -5
  186. package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
  187. package/dist/server/threads/manageThreads.d.ts +2 -2
  188. package/dist/server/threads/manageThreads.js +50 -35
  189. package/dist/server/threads/manageThreads.js.map +1 -1
  190. package/dist/server/threads/socketRouter.d.ts +1 -1
  191. package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
  192. package/dist/utility/AWS/AWSConnector.d.ts +3 -2
  193. package/dist/utility/common_utils.d.ts +3 -3
  194. package/dist/utility/environment/systemInformation.d.ts +1 -0
  195. package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
  196. package/dist/utility/globalSchema.d.ts +1 -1
  197. package/dist/utility/hdbTerms.d.ts +3 -0
  198. package/dist/utility/hdbTerms.js +3 -0
  199. package/dist/utility/hdbTerms.js.map +1 -1
  200. package/dist/utility/installation.d.ts +2 -4
  201. package/dist/utility/installation.js.map +1 -1
  202. package/dist/utility/lmdb/commonUtility.d.ts +1 -0
  203. package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
  204. package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
  205. package/dist/utility/lmdb/searchUtility.d.ts +2 -1
  206. package/dist/utility/lmdb/writeUtility.d.ts +1 -0
  207. package/dist/utility/logging/harper_logger.d.ts +6 -6
  208. package/dist/utility/processManagement/processManagement.d.ts +1 -1
  209. package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
  210. package/dist/validation/common_validators.d.ts +4 -3
  211. package/dist/validation/configValidator.d.ts +3 -2
  212. package/index.d.ts +56 -0
  213. package/index.js +41 -0
  214. package/json/systemSchema.json +373 -0
  215. package/launchServiceScripts/launchHarperDB.js +3 -0
  216. package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
  217. package/package.json +21 -3
  218. package/resources/DatabaseTransaction.ts +378 -0
  219. package/resources/ErrorResource.ts +57 -0
  220. package/resources/IterableEventQueue.ts +94 -0
  221. package/resources/LMDBTransaction.ts +349 -0
  222. package/resources/RecordEncoder.ts +702 -0
  223. package/resources/RequestTarget.ts +134 -0
  224. package/resources/Resource.ts +789 -0
  225. package/resources/ResourceInterface.ts +221 -0
  226. package/resources/ResourceInterfaceV2.ts +53 -0
  227. package/resources/ResourceV2.ts +67 -0
  228. package/resources/Resources.ts +162 -0
  229. package/resources/RocksIndexStore.ts +70 -0
  230. package/resources/RocksTransactionLogStore.ts +352 -0
  231. package/resources/Table.ts +4527 -0
  232. package/resources/analytics/hostnames.ts +72 -0
  233. package/resources/analytics/metadata.ts +10 -0
  234. package/resources/analytics/read.ts +252 -0
  235. package/resources/analytics/write.ts +803 -0
  236. package/resources/auditStore.ts +556 -0
  237. package/resources/blob.ts +1268 -0
  238. package/resources/crdt.ts +125 -0
  239. package/resources/dataLoader.ts +527 -0
  240. package/resources/databases.ts +1290 -0
  241. package/resources/graphql.ts +221 -0
  242. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
  243. package/resources/indexes/customIndexes.ts +7 -0
  244. package/resources/indexes/vector.ts +38 -0
  245. package/resources/jsResource.ts +86 -0
  246. package/resources/loadEnv.ts +22 -0
  247. package/resources/login.ts +18 -0
  248. package/resources/openApi.ts +409 -0
  249. package/resources/registrationDeprecated.ts +8 -0
  250. package/resources/replayLogs.ts +136 -0
  251. package/resources/roles.ts +98 -0
  252. package/resources/search.ts +1301 -0
  253. package/resources/tracked.ts +584 -0
  254. package/resources/transaction.ts +89 -0
  255. package/resources/transactionBroadcast.ts +258 -0
  256. package/security/auth.ts +376 -0
  257. package/security/certificateVerification/certificateVerificationSource.ts +84 -0
  258. package/security/certificateVerification/configValidation.ts +107 -0
  259. package/security/certificateVerification/crlVerification.ts +623 -0
  260. package/security/certificateVerification/index.ts +121 -0
  261. package/security/certificateVerification/ocspVerification.ts +148 -0
  262. package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
  263. package/security/certificateVerification/types.ts +128 -0
  264. package/security/certificateVerification/verificationConfig.ts +138 -0
  265. package/security/certificateVerification/verificationUtils.ts +447 -0
  266. package/security/cryptoHash.js +42 -0
  267. package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
  268. package/security/data_objects/PermissionResponseObject.js +115 -0
  269. package/security/data_objects/PermissionTableResponseObject.js +20 -0
  270. package/security/fastifyAuth.js +169 -0
  271. package/security/impersonation.ts +160 -0
  272. package/security/jsLoader.ts +716 -0
  273. package/security/keys.js +948 -0
  274. package/security/permissionsTranslator.js +300 -0
  275. package/security/role.js +218 -0
  276. package/security/tokenAuthentication.ts +228 -0
  277. package/security/user.ts +449 -0
  278. package/server/DurableSubscriptionsSession.ts +503 -0
  279. package/server/REST.ts +407 -0
  280. package/server/Server.ts +89 -0
  281. package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
  282. package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
  283. package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
  284. package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
  285. package/server/fastifyRoutes.ts +205 -0
  286. package/server/graphqlQuerying.ts +700 -0
  287. package/server/http.ts +640 -0
  288. package/server/itc/serverHandlers.js +161 -0
  289. package/server/itc/utility/ITCEventObject.js +10 -0
  290. package/server/jobs/JobObject.js +24 -0
  291. package/server/jobs/jobProcess.js +69 -0
  292. package/server/jobs/jobRunner.js +162 -0
  293. package/server/jobs/jobs.js +304 -0
  294. package/server/loadRootComponents.js +44 -0
  295. package/server/mqtt.ts +485 -0
  296. package/server/nodeName.ts +75 -0
  297. package/server/operationsServer.ts +313 -0
  298. package/server/serverHelpers/Headers.ts +108 -0
  299. package/server/serverHelpers/JSONStream.ts +269 -0
  300. package/server/serverHelpers/OperationFunctionObject.ts +13 -0
  301. package/server/serverHelpers/Request.ts +158 -0
  302. package/server/serverHelpers/contentTypes.ts +637 -0
  303. package/server/serverHelpers/requestTimePlugin.js +57 -0
  304. package/server/serverHelpers/serverHandlers.js +148 -0
  305. package/server/serverHelpers/serverUtilities.ts +473 -0
  306. package/server/serverRegistry.ts +8 -0
  307. package/server/static.ts +187 -0
  308. package/server/status/definitions.ts +37 -0
  309. package/server/status/index.ts +125 -0
  310. package/server/storageReclamation.ts +93 -0
  311. package/server/threads/itc.js +89 -0
  312. package/server/threads/manageThreads.js +594 -0
  313. package/server/threads/socketRouter.ts +360 -0
  314. package/server/threads/threadServer.js +279 -0
  315. package/server/throttle.ts +73 -0
  316. package/sqlTranslator/SelectValidator.js +330 -0
  317. package/sqlTranslator/alasqlFunctionImporter.js +62 -0
  318. package/sqlTranslator/deleteTranslator.js +67 -0
  319. package/sqlTranslator/index.js +242 -0
  320. package/sqlTranslator/sql_statement_bucket.js +472 -0
  321. package/static/defaultConfig.yaml +3 -0
  322. package/studio/web/HDBDogOnly.svg +78 -0
  323. package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
  324. package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
  325. package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
  326. package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
  327. package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
  328. package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
  329. package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
  330. package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
  331. package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
  332. package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
  333. package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
  334. package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
  335. package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
  336. package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
  337. package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
  338. package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
  339. package/studio/web/assets/index-BTgXJX9d.js +235 -0
  340. package/studio/web/assets/index-BTgXJX9d.js.map +1 -0
  341. package/studio/web/assets/index-C-GXfcup.js +37 -0
  342. package/studio/web/assets/index-C-GXfcup.js.map +1 -0
  343. package/studio/web/assets/index-PFlNdimM.js +2 -0
  344. package/studio/web/assets/index-PFlNdimM.js.map +1 -0
  345. package/studio/web/assets/index-Y2g_iFpU.css +1 -0
  346. package/studio/web/assets/index-jiPwkrsB.css +1 -0
  347. package/studio/web/assets/index.lazy-C3TJZJ4o.js +266 -0
  348. package/studio/web/assets/index.lazy-C3TJZJ4o.js.map +1 -0
  349. package/studio/web/assets/profiler-DotzgiCJ.js +2 -0
  350. package/studio/web/assets/profiler-DotzgiCJ.js.map +1 -0
  351. package/studio/web/assets/react-redux-VxUEx_mU.js +6 -0
  352. package/studio/web/assets/react-redux-VxUEx_mU.js.map +1 -0
  353. package/studio/web/assets/startRecording-B_9J9Csd.js +3 -0
  354. package/studio/web/assets/startRecording-B_9J9Csd.js.map +1 -0
  355. package/studio/web/fabric-signup-background.webp +0 -0
  356. package/studio/web/fabric-signup-text.png +0 -0
  357. package/studio/web/favicon_purple.png +0 -0
  358. package/studio/web/github-icon.svg +15 -0
  359. package/studio/web/harper-fabric_black.png +0 -0
  360. package/studio/web/harper-fabric_white.png +0 -0
  361. package/studio/web/harper-studio_white.png +0 -0
  362. package/studio/web/index.html +16 -0
  363. package/studio/web/running.css +148 -0
  364. package/studio/web/running.html +147 -0
  365. package/studio/web/running.js +111 -0
  366. package/upgrade/UpgradeObjects.js +13 -0
  367. package/upgrade/directives/directivesController.js +90 -0
  368. package/upgrade/directivesManager.js +139 -0
  369. package/upgrade/upgradePrompt.js +124 -0
  370. package/upgrade/upgradeUtilities.js +28 -0
  371. package/utility/AWS/AWSConnector.js +29 -0
  372. package/utility/OperationFunctionCaller.js +63 -0
  373. package/utility/assignCmdEnvVariables.js +62 -0
  374. package/utility/common_utils.js +867 -0
  375. package/utility/environment/environmentManager.js +208 -0
  376. package/utility/environment/systemInformation.js +355 -0
  377. package/utility/errors/commonErrors.js +267 -0
  378. package/utility/errors/hdbError.js +146 -0
  379. package/utility/functions/date/dateFunctions.js +65 -0
  380. package/utility/functions/geo.js +355 -0
  381. package/utility/functions/sql/alaSQLExtension.js +104 -0
  382. package/utility/globalSchema.js +35 -0
  383. package/utility/hdbTerms.ts +819 -0
  384. package/utility/install/checkJWTTokensExist.js +62 -0
  385. package/utility/install/harperdb.conf +15 -0
  386. package/utility/install/harperdb.service +14 -0
  387. package/utility/install/installer.js +635 -0
  388. package/utility/installation.ts +30 -0
  389. package/utility/lmdb/DBIDefinition.js +20 -0
  390. package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
  391. package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
  392. package/utility/lmdb/OpenDBIObject.js +31 -0
  393. package/utility/lmdb/OpenEnvironmentObject.js +41 -0
  394. package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
  395. package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
  396. package/utility/lmdb/cleanLMDBMap.js +65 -0
  397. package/utility/lmdb/commonUtility.js +119 -0
  398. package/utility/lmdb/deleteUtility.js +128 -0
  399. package/utility/lmdb/environmentUtility.js +477 -0
  400. package/utility/lmdb/searchCursorFunctions.js +187 -0
  401. package/utility/lmdb/searchUtility.js +918 -0
  402. package/utility/lmdb/terms.js +57 -0
  403. package/utility/lmdb/writeUtility.js +407 -0
  404. package/utility/logging/harper_logger.js +876 -0
  405. package/utility/logging/logRotator.js +157 -0
  406. package/utility/logging/logger.ts +24 -0
  407. package/utility/logging/readLog.js +355 -0
  408. package/utility/logging/transactionLog.js +57 -0
  409. package/utility/mount_hdb.js +59 -0
  410. package/utility/npmUtilities.js +102 -0
  411. package/utility/operationPermissions.ts +112 -0
  412. package/utility/operation_authorization.js +836 -0
  413. package/utility/packageUtils.js +55 -0
  414. package/utility/password.ts +99 -0
  415. package/utility/processManagement/processManagement.js +187 -0
  416. package/utility/processManagement/servicesConfig.js +56 -0
  417. package/utility/scripts/restartHdb.js +24 -0
  418. package/utility/scripts/user_data.sh +13 -0
  419. package/utility/signalling.js +36 -0
  420. package/utility/terms/certificates.js +81 -0
  421. package/utility/when.ts +20 -0
  422. package/v1.d.ts +39 -0
  423. package/v1.js +41 -0
  424. package/v2.d.ts +39 -0
  425. package/v2.js +41 -0
  426. package/validation/bulkDeleteValidator.js +24 -0
  427. package/validation/check_permissions.js +19 -0
  428. package/validation/common_validators.js +95 -0
  429. package/validation/configValidator.js +331 -0
  430. package/validation/deleteValidator.js +15 -0
  431. package/validation/fileLoadValidator.js +153 -0
  432. package/validation/insertValidator.js +40 -0
  433. package/validation/installValidator.js +37 -0
  434. package/validation/readLogValidator.js +64 -0
  435. package/validation/role_validation.js +320 -0
  436. package/validation/schemaMetadataValidator.js +42 -0
  437. package/validation/searchValidator.js +166 -0
  438. package/validation/statusValidator.ts +66 -0
  439. package/validation/transactionLogValidator.js +33 -0
  440. package/validation/user_validation.js +55 -0
  441. package/validation/validationWrapper.js +105 -0
  442. package/dist/resources/analytics/profile.d.ts +0 -2
  443. package/dist/resources/analytics/profile.js +0 -144
  444. package/dist/resources/analytics/profile.js.map +0 -1
package/v2.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ export { ResourceV2 as Resource } from './resources/ResourceV2.ts';
2
+ export type {
3
+ Context,
4
+ Query,
5
+ RequestTargetOrId,
6
+ Session,
7
+ SourceContext,
8
+ SubscriptionRequest,
9
+ } from './resources/ResourceInterface.ts';
10
+ export { ResourceInterfaceV2 as ResourceInterface } from './resources/ResourceInterfaceV2.ts';
11
+ export type { User } from './security/user.ts';
12
+ export type { RecordObject } from './resources/RecordEncoder.ts';
13
+ export type { IterableEventQueue } from './resources/IterableEventQueue.ts';
14
+ export { RequestTarget } from './resources/RequestTarget.ts';
15
+ export { server } from './server/Server';
16
+ export { tables, databases, type Table } from './resources/databases.ts';
17
+ export type { Attribute } from './resources/Table.ts';
18
+
19
+ import type { Logger } from './components/Logger.ts';
20
+ declare const logger: Logger;
21
+ export { type Logger, logger };
22
+
23
+ export type { Scope } from './components/Scope.ts';
24
+ export type { FilesOption, FilesOptionObject } from './components/deriveGlobOptions.ts';
25
+ export type { FileAndURLPathConfig } from './components/Component.ts';
26
+ export { OptionsWatcher, type Config, type ConfigValue } from './components/OptionsWatcher.ts';
27
+ export {
28
+ EntryHandler,
29
+ type BaseEntry,
30
+ type FileEntry,
31
+ type EntryEvent,
32
+ type AddFileEvent,
33
+ type ChangeFileEvent,
34
+ type UnlinkFileEvent,
35
+ type FileEntryEvent,
36
+ type AddDirectoryEvent,
37
+ type UnlinkDirectoryEvent,
38
+ type DirectoryEntryEvent,
39
+ } from './components/EntryHandler.ts';
package/v2.js ADDED
@@ -0,0 +1,41 @@
1
+ const workerThreads = require('node:worker_threads');
2
+ if (!workerThreads.isMainThread) {
3
+ // Prevents server from starting in worker threads if this was directly imported from a non-server user thread
4
+ if (!workerThreads.workerData) workerThreads.workerData = {};
5
+ workerThreads.workerData.noServerStart = true;
6
+ }
7
+ const { globals } = require('./server/threads/threadServer.js');
8
+
9
+ // exported types are needed for parsing as well
10
+ exports.Attribute = undefined;
11
+ exports.Config = undefined;
12
+ exports.ConfigValue = undefined;
13
+ exports.Context = undefined;
14
+ exports.FileAndURLPathConfig = undefined;
15
+ exports.FilesOption = undefined;
16
+ exports.FilesOptionObject = undefined;
17
+ exports.IterableEventQueue = undefined;
18
+ exports.Logger = undefined;
19
+ exports.Query = undefined;
20
+ exports.RecordObject = undefined;
21
+ exports.RequestTarget = undefined;
22
+ exports.RequestTargetOrId = undefined;
23
+ exports.Resource = undefined;
24
+ exports.ResourceInterface = undefined;
25
+ exports.Scope = undefined;
26
+ exports.Session = undefined;
27
+ exports.SourceContext = undefined;
28
+ exports.SubscriptionRequest = undefined;
29
+ exports.Table = undefined;
30
+ exports.User = undefined;
31
+
32
+ // these are all overwritten by the globals, but need to be here so that Node's static
33
+ // exports parser can analyze them
34
+ exports.tables = {};
35
+ exports.databases = {};
36
+ exports.getUser = undefined;
37
+ exports.server = {};
38
+ exports.contentTypes = null;
39
+ exports.threads = [];
40
+ exports.logger = {};
41
+ Object.assign(exports, globals);
@@ -0,0 +1,24 @@
1
+ const validator = require('./validationWrapper.js');
2
+ const Joi = require('joi');
3
+ const { hdbTable, hdbDatabase } = require('./common_validators.js');
4
+
5
+ const validationSchema = {
6
+ schema: hdbDatabase,
7
+ database: hdbDatabase,
8
+ table: hdbTable,
9
+ };
10
+
11
+ const dateSchema = {
12
+ date: Joi.date().iso().required(),
13
+ };
14
+
15
+ const timestampSchema = {
16
+ timestamp: Joi.date().timestamp().required().messages({ 'date.format': "'timestamp' is invalid" }),
17
+ };
18
+
19
+ module.exports = function (deleteObject, dateFormat) {
20
+ const finalSchema =
21
+ dateFormat === 'timestamp' ? { ...validationSchema, ...timestampSchema } : { ...validationSchema, ...dateSchema };
22
+ const bulkDeleteSchema = Joi.object(finalSchema);
23
+ return validator.validateBySchema(deleteObject, bulkDeleteSchema);
24
+ };
@@ -0,0 +1,19 @@
1
+ const validator = require('./validationWrapper.js');
2
+
3
+ const constraints = {
4
+ user: {
5
+ presence: true,
6
+ },
7
+ schema: {
8
+ presence: true,
9
+ },
10
+ table: {
11
+ presence: true,
12
+ },
13
+ operation: {
14
+ presence: true,
15
+ },
16
+ };
17
+ module.exports = function (deleteObject) {
18
+ return validator.validateObject(deleteObject, constraints);
19
+ };
@@ -0,0 +1,95 @@
1
+ 'use strict';
2
+
3
+ const hdbUtils = require('../utility/common_utils.js');
4
+ const hdbTerms = require('../utility/hdbTerms.ts');
5
+ const schemaRegex = /^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/;
6
+ const Joi = require('joi');
7
+
8
+ const commonValidators = {
9
+ schema_format: {
10
+ pattern: schemaRegex,
11
+ message: 'names cannot include backticks or forward slashes',
12
+ },
13
+ schema_length: {
14
+ minimum: 1,
15
+ maximum: 250,
16
+ tooLong: 'cannot exceed 250 characters',
17
+ },
18
+ };
19
+
20
+ // A Joi schema that can be used to validate hdb schemas and tables.
21
+ const hdbSchemaTable = Joi.alternatives(
22
+ Joi.string()
23
+ .min(1)
24
+ .max(commonValidators.schema_length.maximum)
25
+ .pattern(schemaRegex)
26
+ .messages({ 'string.pattern.base': '{:#label} ' + commonValidators.schema_format.message }),
27
+ Joi.number(),
28
+ Joi.array()
29
+ ).required();
30
+
31
+ const hdbDatabase = Joi.alternatives(
32
+ Joi.string()
33
+ .min(1)
34
+ .max(commonValidators.schema_length.maximum)
35
+ .pattern(schemaRegex)
36
+ .messages({ 'string.pattern.base': '{:#label} ' + commonValidators.schema_format.message }),
37
+ Joi.number()
38
+ );
39
+
40
+ const hdbTable = Joi.alternatives(
41
+ Joi.string()
42
+ .min(1)
43
+ .max(commonValidators.schema_length.maximum)
44
+ .pattern(schemaRegex)
45
+ .messages({ 'string.pattern.base': '{:#label} ' + commonValidators.schema_format.message }),
46
+ Joi.number()
47
+ ).required();
48
+
49
+ function checkValidTable(propertyName, value) {
50
+ if (!value) return `'${propertyName}' is required`;
51
+ if (typeof value !== 'string') return `'${propertyName}' must be a string`;
52
+ if (!value.length) return `'${propertyName}' must be at least one character`;
53
+ if (value.length > commonValidators.schema_length.maximum) return `'${propertyName}' maximum of 250 characters`;
54
+ if (!schemaRegex.test(value)) return `'${propertyName}' has illegal characters`;
55
+ return '';
56
+ }
57
+
58
+ function validateSchemaExists(value, helpers) {
59
+ if (!hdbUtils.doesSchemaExist(value)) {
60
+ return helpers.message(`Database '${value}' does not exist`);
61
+ }
62
+
63
+ return value;
64
+ }
65
+
66
+ function validateTableExists(value, helpers) {
67
+ const schema = helpers.state.ancestors[0].schema;
68
+ if (!hdbUtils.doesTableExist(schema, value)) {
69
+ return helpers.message(`Table '${value}' does not exist`);
70
+ }
71
+
72
+ return value;
73
+ }
74
+
75
+ function validateSchemaName(value, helpers) {
76
+ if (value.toLowerCase() === hdbTerms.SYSTEM_SCHEMA_NAME) {
77
+ return helpers.message(
78
+ `'subscriptions[${helpers.state.path[1]}]' invalid database name, '${hdbTerms.SYSTEM_SCHEMA_NAME}' name is reserved`
79
+ );
80
+ }
81
+
82
+ return value;
83
+ }
84
+
85
+ module.exports = {
86
+ commonValidators,
87
+ schemaRegex,
88
+ hdbSchemaTable,
89
+ validateSchemaExists,
90
+ validateTableExists,
91
+ validateSchemaName,
92
+ checkValidTable,
93
+ hdbDatabase,
94
+ hdbTable,
95
+ };
@@ -0,0 +1,331 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs-extra');
4
+ const Joi = require('joi');
5
+ const os = require('os');
6
+ const { boolean, string, number, array } = Joi.types();
7
+ const { totalmem } = require('os');
8
+ const path = require('path');
9
+ const hdbLogger = require('../utility/logging/harper_logger.js');
10
+ const hdbUtils = require('../utility/common_utils.js');
11
+ const hdbTerms = require('../utility/hdbTerms.ts');
12
+ const validator = require('./validationWrapper.js');
13
+
14
+ const DEFAULT_LOG_FOLDER = 'log';
15
+ const DEFAULT_COMPONENTS_FOLDER = 'components';
16
+ const INVALID_SIZE_UNIT_MSG = 'Invalid logging.rotation.maxSize unit. Available units are G, M or K';
17
+ const INVALID_INTERVAL_UNIT_MSG = 'Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)';
18
+ const INVALID_MAX_SIZE_VALUE_MSG =
19
+ "Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'";
20
+ const INVALID_INTERVAL_VALUE_MSG =
21
+ "Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'";
22
+ const UNDEFINED_OPS_API = 'rootPath config parameter is undefined';
23
+
24
+ const portConstraints = Joi.alternatives([number.min(0), string])
25
+ .optional()
26
+ .empty(null);
27
+ const routeConstraints = Joi.alternatives([
28
+ array
29
+ .items(
30
+ string,
31
+ {
32
+ host: string.required(),
33
+ port: portConstraints,
34
+ },
35
+ {
36
+ hostname: string.required(),
37
+ port: portConstraints,
38
+ }
39
+ )
40
+ .empty(null),
41
+ array.items(string),
42
+ ]);
43
+
44
+ let hdbRoot;
45
+ let skipFsVal = false;
46
+
47
+ module.exports = {
48
+ configValidator,
49
+ routesValidator,
50
+ routeConstraints,
51
+ };
52
+
53
+ function configValidator(configJson, skipFsValidation = false) {
54
+ skipFsVal = skipFsValidation;
55
+ hdbRoot = configJson.rootPath;
56
+ if (hdbUtils.isEmpty(hdbRoot)) {
57
+ throw UNDEFINED_OPS_API;
58
+ }
59
+
60
+ const enabledConstraints = boolean.optional();
61
+ const threadsConstraints = number.min(0).max(1000).empty(null).default(setDefaultThreads);
62
+ const rootConstraints = string
63
+ .pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/, 'directory path')
64
+ .empty(null)
65
+ .default(setDefaultRoot);
66
+ const pemFileConstraints = string.optional().empty(null);
67
+
68
+ const storagePathConstraints = Joi.custom(validatePath).empty(null).default(setDefaultRoot);
69
+ const tlsConstraints = Joi.object({
70
+ certificate: pemFileConstraints,
71
+ certificateAuthority: pemFileConstraints,
72
+ privateKey: pemFileConstraints,
73
+ });
74
+
75
+ const configSchema = Joi.object({
76
+ authentication: Joi.alternatives(
77
+ Joi.object({
78
+ authorizeLocal: boolean,
79
+ cacheTTL: number.required(),
80
+ cookie: Joi.object({
81
+ domains: array.items(string).optional(),
82
+ expires: string.optional(),
83
+ }),
84
+ enableSessions: boolean,
85
+ hashFunction: string.valid('md5', 'sha256', 'argon2id').optional().empty(null),
86
+ }),
87
+ boolean
88
+ ).optional(),
89
+ analytics: Joi.object({
90
+ aggregatePeriod: number,
91
+ replicate: boolean.optional(),
92
+ }),
93
+ replication: Joi.object({
94
+ hostname: Joi.alternatives(string, number).optional().empty(null),
95
+ url: string.optional().empty(null),
96
+ port: portConstraints,
97
+ securePort: portConstraints,
98
+ routes: array.optional().empty(null),
99
+ databases: Joi.alternatives(string, array),
100
+ enableRootCAs: boolean.optional(),
101
+ copyTablesToCatchUp: boolean.optional(),
102
+ }).optional(),
103
+ componentsRoot: rootConstraints.optional(),
104
+ localStudio: Joi.object({
105
+ enabled: enabledConstraints,
106
+ }).required(),
107
+ logging: Joi.object({
108
+ auditAuthEvents: Joi.object({
109
+ logFailed: boolean,
110
+ logSuccessful: boolean,
111
+ }),
112
+ file: boolean.required(),
113
+ level: Joi.valid('notify', 'fatal', 'error', 'warn', 'info', 'debug', 'trace'),
114
+ rotation: Joi.object({
115
+ enabled: boolean.optional(),
116
+ compress: boolean.optional(),
117
+ interval: string.custom(validateRotationInterval).optional().empty(null),
118
+ maxSize: string.custom(validateRotationMaxSize).optional().empty(null),
119
+ path: string.optional().empty(null).default(setDefaultRoot),
120
+ }).required(),
121
+ root: rootConstraints,
122
+ stdStreams: boolean.required(),
123
+ auditLog: boolean.required(),
124
+ }).required(),
125
+ operationsApi: Joi.object({
126
+ network: Joi.object({
127
+ cors: boolean.optional(),
128
+ corsAccessList: array.optional(),
129
+ headersTimeout: number.min(1).optional(),
130
+ keepAliveTimeout: number.min(1).optional(),
131
+ port: portConstraints,
132
+ domainSocket: Joi.optional().empty('hdb/operations-server').default(setDefaultRoot),
133
+ securePort: portConstraints,
134
+ timeout: number.min(1).optional(),
135
+ }).optional(),
136
+ tls: Joi.alternatives([Joi.array().items(tlsConstraints), tlsConstraints]),
137
+ }).required(),
138
+ rootPath: string.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/, 'directory path').required(),
139
+ mqtt: Joi.object({
140
+ network: Joi.object({
141
+ port: portConstraints,
142
+ securePort: portConstraints,
143
+ mtls: Joi.alternatives([
144
+ boolean.optional(),
145
+ Joi.object({
146
+ user: string.optional(),
147
+ certificateAuthority: pemFileConstraints,
148
+ required: boolean.optional(),
149
+ }),
150
+ ]),
151
+ }).required(),
152
+ webSocket: boolean.optional(),
153
+ requireAuthentication: boolean.optional(),
154
+ }),
155
+ http: Joi.object({
156
+ compressionThreshold: number.optional(),
157
+ cors: boolean.optional(),
158
+ corsAccessList: array.optional(),
159
+ headersTimeout: number.min(1).optional(),
160
+ port: portConstraints,
161
+ securePort: portConstraints,
162
+ maxHeaderSize: number.optional(),
163
+ mtls: Joi.alternatives([
164
+ boolean.optional(),
165
+ Joi.object({
166
+ user: string.optional(),
167
+ certificateAuthority: pemFileConstraints,
168
+ required: boolean.optional(),
169
+ }),
170
+ ]),
171
+ threadRange: Joi.alternatives([array.optional(), string.optional()]),
172
+ }).required(),
173
+ threads: Joi.alternatives(
174
+ threadsConstraints.optional(),
175
+ Joi.object({
176
+ count: threadsConstraints.optional(),
177
+ debug: Joi.alternatives(
178
+ boolean.optional(),
179
+ Joi.object({
180
+ startingPort: number.min(1).optional(),
181
+ host: string.optional(),
182
+ waitForDebugger: boolean.optional(),
183
+ })
184
+ ),
185
+ maxHeapMemory: number.min(0).optional(),
186
+ })
187
+ ),
188
+ storage: Joi.object({
189
+ writeAsync: boolean.required(),
190
+ overlappingSync: boolean.optional(),
191
+ caching: boolean.optional(),
192
+ compression: Joi.alternatives([
193
+ boolean.optional(),
194
+ Joi.object({ dictionary: string.optional(), threshold: number.optional() }),
195
+ ]),
196
+ compactOnStart: boolean.optional(),
197
+ compactOnStartKeepBackup: boolean.optional(),
198
+ noReadAhead: boolean.optional(),
199
+ path: storagePathConstraints,
200
+ prefetchWrites: boolean.optional(),
201
+ maxFreeSpaceToLoad: number.optional(),
202
+ maxFreeSpaceToRetain: number.optional(),
203
+ }).required(),
204
+ ignoreScripts: boolean.optional(),
205
+ tls: Joi.alternatives([Joi.array().items(tlsConstraints), tlsConstraints]),
206
+ });
207
+
208
+ // Not using the validation wrapper here because we need the result if validation is successful because
209
+ // there is default values set as part of validation.
210
+ return configSchema.validate(configJson, {
211
+ allowUnknown: true,
212
+ abortEarly: false,
213
+ errors: { wrap: { label: "'" } },
214
+ });
215
+ }
216
+
217
+ // This function is used to validate existence of paths passed as an argument
218
+ function doesPathExist(pathToCheck) {
219
+ if (skipFsVal) return null;
220
+ let exists = fs.existsSync(pathToCheck);
221
+ if (exists) {
222
+ return null;
223
+ }
224
+
225
+ return `Specified path ${pathToCheck} does not exist.`;
226
+ }
227
+
228
+ function validatePath(value, helpers) {
229
+ Joi.assert(value, string.pattern(/^[\\/]$|([\\/a-zA-Z_0-9:-]+)+$/, 'directory path'));
230
+
231
+ const doesExistMsg = doesPathExist(value);
232
+ if (doesExistMsg) {
233
+ return helpers.message(doesExistMsg);
234
+ }
235
+ }
236
+
237
+ function validateRotationMaxSize(value, helpers) {
238
+ const unit = value.slice(-1);
239
+ if (unit !== 'G' && unit !== 'M' && unit !== 'K') {
240
+ return helpers.message(INVALID_SIZE_UNIT_MSG);
241
+ }
242
+
243
+ const size = value.slice(0, -1);
244
+ if (isNaN(parseInt(size))) {
245
+ return helpers.message(INVALID_MAX_SIZE_VALUE_MSG);
246
+ }
247
+
248
+ return value;
249
+ }
250
+
251
+ function validateRotationInterval(value, helpers) {
252
+ const unit = value.slice(-1);
253
+ if (unit !== 'D' && unit !== 'H' && unit !== 'M') {
254
+ return helpers.message(INVALID_INTERVAL_UNIT_MSG);
255
+ }
256
+
257
+ const size = value.slice(0, -1);
258
+ if (isNaN(parseInt(size))) {
259
+ return helpers.message(INVALID_INTERVAL_VALUE_MSG);
260
+ }
261
+
262
+ return value;
263
+ }
264
+
265
+ function setDefaultThreads(parent, helpers) {
266
+ const configParam = helpers.state.path.join('.');
267
+ let processors = os.cpus().length;
268
+
269
+ // default to one less than the number of logical CPU/processors so we can have good concurrency with the
270
+ // ingest process and any extra processes (jobs, reply, etc.).
271
+ let numProcesses = processors - 1;
272
+ // But if only two or less processors, keep two processes so we have some level of concurrency fairness
273
+ if (numProcesses <= 2) numProcesses = 2;
274
+ let availableMemory = process.constrainedMemory?.() || totalmem(); // used constrained memory if it is available
275
+ // and lower than total memory
276
+ availableMemory = Math.round(Math.min(availableMemory, totalmem()) / 1000000);
277
+ // (available memory -750MB) / 300MB
278
+ numProcesses = Math.max(Math.min(numProcesses, Math.round((availableMemory - 750) / 300)), 1);
279
+ hdbLogger.info(
280
+ `Detected ${processors} cores and ${availableMemory}MB on this machine, defaulting ${configParam} to ${numProcesses}`
281
+ );
282
+ return numProcesses;
283
+ }
284
+
285
+ /**
286
+ * Sets a default root for a config param.
287
+ * @param parent
288
+ * @param helpers
289
+ * @returns {string}
290
+ */
291
+ function setDefaultRoot(parent, helpers) {
292
+ // For some reason Joi is still calling set default when value is not null.
293
+ // For that reason we do this check.
294
+ const configParam = helpers.state.path.join('.');
295
+ if (!hdbUtils.isEmpty(helpers.original) && configParam !== 'operationsApi.network.domainSocket') {
296
+ return helpers.original;
297
+ }
298
+
299
+ if (hdbUtils.isEmpty(hdbRoot)) {
300
+ throw new Error(`Error setting default root for: ${configParam}. HDB root is not defined`);
301
+ }
302
+
303
+ switch (configParam) {
304
+ case 'componentsRoot':
305
+ return path.join(hdbRoot, DEFAULT_COMPONENTS_FOLDER);
306
+ case 'logging.root':
307
+ return path.join(hdbRoot, DEFAULT_LOG_FOLDER);
308
+ case 'storage.path':
309
+ const legacyStoragePath = path.join(hdbRoot, hdbTerms.LEGACY_DATABASES_DIR_NAME);
310
+ if (fs.existsSync(legacyStoragePath)) return legacyStoragePath;
311
+ return path.join(hdbRoot, hdbTerms.DATABASES_DIR_NAME);
312
+ case 'logging.rotation.path':
313
+ return path.join(hdbRoot, DEFAULT_LOG_FOLDER);
314
+ case 'operationsApi.network.domainSocket':
315
+ return configParam == null ? null : path.join(hdbRoot, 'operations-server');
316
+ default:
317
+ throw new Error(`Error setting default root for config parameter: ${configParam}. Unrecognized config parameter`);
318
+ }
319
+ }
320
+
321
+ /**
322
+ * Validates just the routes array.
323
+ * @param routesArray
324
+ * @returns {*}
325
+ */
326
+ function routesValidator(routesArray) {
327
+ const schema = Joi.object({
328
+ routes: routeConstraints,
329
+ });
330
+ return validator.validateBySchema({ routes: routesArray }, schema);
331
+ }
@@ -0,0 +1,15 @@
1
+ const validator = require('./validationWrapper.js');
2
+ const Joi = require('joi');
3
+ const { hdbTable, hdbDatabase } = require('./common_validators.js');
4
+
5
+ const deleteSchema = Joi.object({
6
+ schema: hdbDatabase,
7
+ database: hdbDatabase,
8
+ table: hdbTable,
9
+ hash_values: Joi.array().required(),
10
+ ids: Joi.array(),
11
+ });
12
+
13
+ module.exports = function (deleteObject) {
14
+ return validator.validateBySchema(deleteObject, deleteSchema);
15
+ };