@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
@@ -0,0 +1,300 @@
1
+ 'use strict';
2
+
3
+ const _ = require('lodash');
4
+ const terms = require('../utility/hdbTerms.ts');
5
+ const { handleHDBError, hdbErrors } = require('../utility/errors/hdbError.js');
6
+ const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
7
+ const logger = require('../utility/logging/harper_logger.js');
8
+
9
+ module.exports = {
10
+ getRolePermissions,
11
+ };
12
+
13
+ const rolePermsMap = Object.create(null);
14
+ const permsTemplateObj = (permsKey) => ({ key: permsKey, perms: {} });
15
+
16
+ const schemaPermsTemplate = (describePerm = false) => ({
17
+ describe: describePerm,
18
+ tables: {},
19
+ });
20
+
21
+ const permissionsTemplate = (readPerm = false, insertPerm = false, updatePerm = false, deletePerm = false) => ({
22
+ [terms.PERMS_CRUD_ENUM.READ]: readPerm,
23
+ [terms.PERMS_CRUD_ENUM.INSERT]: insertPerm,
24
+ [terms.PERMS_CRUD_ENUM.UPDATE]: updatePerm,
25
+ [terms.PERMS_CRUD_ENUM.DELETE]: deletePerm,
26
+ });
27
+
28
+ const tablePermsTemplate = (
29
+ describePerm = false,
30
+ readPerm = false,
31
+ insertPerm = false,
32
+ updatePerm = false,
33
+ deletePerm = false
34
+ ) => ({
35
+ attribute_permissions: [],
36
+ describe: describePerm,
37
+ ...permissionsTemplate(readPerm, insertPerm, updatePerm, deletePerm),
38
+ });
39
+
40
+ const attrPermsTemplate = (attrName, perms = permissionsTemplate()) => ({
41
+ attribute_name: attrName,
42
+ describe: getAttributeDescribePerm(perms),
43
+ [READ]: perms[READ],
44
+ [INSERT]: perms[INSERT],
45
+ [UPDATE]: perms[UPDATE],
46
+ });
47
+
48
+ const timestampAttrPermsTemplate = (attrName, readPerm = false) => ({
49
+ attribute_name: attrName,
50
+ describe: readPerm,
51
+ [READ]: readPerm,
52
+ });
53
+
54
+ const { READ, INSERT, UPDATE } = terms.PERMS_CRUD_ENUM;
55
+ const crudPermKeys = Object.values(terms.PERMS_CRUD_ENUM);
56
+ //we do not need/track DELETE permissions on the attribute level
57
+ const attrCrudPermKeys = [READ, INSERT, UPDATE];
58
+
59
+ /**
60
+ * Takes role object and evaluates and updates stored permissions based on the more restrictive logic now in place
61
+ * NOTE: Values are stored in a memoization framework so they can be quickly accessed if the arguments/parameters for the
62
+ * function call have not changed
63
+ *
64
+ * @param role
65
+ * @returns {{updated permissions object value}}
66
+ */
67
+ function getRolePermissions(role) {
68
+ let roleName;
69
+ try {
70
+ if (role.permission.super_user) {
71
+ //Super users have full CRUD access to non-system schema items so no translation is required
72
+ return role.permission;
73
+ }
74
+
75
+ //permissions only need to be translated for non-system schema items - system specific ops are handled outside of this process
76
+ const nonSysSchema = { ...global.hdb_schema };
77
+ delete nonSysSchema[terms.SYSTEM_SCHEMA_NAME];
78
+ roleName = role.role;
79
+ //creates the unique memoization key for the role's permission based on the role updatedtime and non-system
80
+ // schema - if either have changed since the last time the function was called for the role, we re-run the
81
+ // translation to get an updated permissions set
82
+ const permsKey = JSON.stringify([role['__updatedtime__'], nonSysSchema]);
83
+
84
+ //If key exists already, we can return the cached value
85
+ if (rolePermsMap[roleName] && rolePermsMap[roleName].key === permsKey) {
86
+ return rolePermsMap[roleName].perms;
87
+ }
88
+
89
+ //If the key does not exist, we need new perms
90
+ const newRolePerms = translateRolePermissions(role, nonSysSchema);
91
+
92
+ //If the role has not been memoized yet, we create a value in the cache for it and set the key OR just set the new key
93
+ if (!rolePermsMap[roleName]) {
94
+ rolePermsMap[roleName] = permsTemplateObj(permsKey);
95
+ } else {
96
+ rolePermsMap[roleName].key = permsKey;
97
+ }
98
+
99
+ //Set the new perms return value into the cache
100
+ rolePermsMap[roleName].perms = newRolePerms;
101
+
102
+ return newRolePerms;
103
+ } catch (e) {
104
+ if (
105
+ !role[terms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME] ||
106
+ role[terms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME] < terms.PERMS_UPDATE_RELEASE_TIMESTAMP
107
+ ) {
108
+ const logMsg = `Role permissions for role '${roleName}' must be updated to align with new structure from the 2.2.0 release.`;
109
+ logger.error(logMsg);
110
+ logger.debug(e);
111
+ throw handleHDBError(new Error(), HDB_ERROR_MSGS.OUTDATED_PERMS_TRANSLATION_ERROR, HTTP_STATUS_CODES.BAD_REQUEST);
112
+ } else {
113
+ const logMsg = `There was an error while translating role permissions for role: ${roleName}.\n ${e.stack}`;
114
+ logger.error(logMsg);
115
+ throw handleHDBError(new Error());
116
+ }
117
+ }
118
+ }
119
+
120
+ /**
121
+ * If a perms value is not memoized, this method takes the role and schema and translates final permissions to set for the role
122
+ * and memoize
123
+ *
124
+ * @param role
125
+ * @param schema
126
+ * @returns {{translatedRolePermsObj}}
127
+ */
128
+ function translateRolePermissions(role, schema) {
129
+ const finalPermissions = Object.create(null);
130
+ finalPermissions.super_user = false;
131
+
132
+ const perms = role.permission;
133
+ finalPermissions[terms.SYSTEM_SCHEMA_NAME] = perms[terms.SYSTEM_SCHEMA_NAME];
134
+ finalPermissions.structure_user = perms.structure_user;
135
+ // Preserve operations allowlist and its pre-expanded Set so the gate check in
136
+ // verifyPerms still has access after role.permission is replaced with fullRolePerms.
137
+ finalPermissions.operations = perms.operations;
138
+ finalPermissions._expandedOperations = perms._expandedOperations;
139
+ const structureUser =
140
+ Array.isArray(role.permission.structure_user) || role.permission.structure_user === true
141
+ ? role.permission.structure_user
142
+ : [];
143
+
144
+ Object.keys(schema).forEach((s) => {
145
+ if (structureUser === true || structureUser.indexOf(s) > -1) {
146
+ finalPermissions[s] = createStructureUserPermissions(schema[s]);
147
+ return;
148
+ }
149
+ finalPermissions[s] = schemaPermsTemplate();
150
+ if (perms[s]) {
151
+ if (perms[s].describe) finalPermissions[s].describe = true; // preserve describe
152
+ //translate schema.tables to permissions
153
+ Object.keys(schema[s]).forEach((t) => {
154
+ if (perms[s].tables[t]) {
155
+ //need to evaluate individual table perms AND attr perms
156
+ const table_perms = perms[s].tables[t];
157
+ const tableSchema = schema[s][t];
158
+
159
+ const updatedTablePerms = getTableAttrPerms(table_perms, tableSchema);
160
+ //we need to set a read value on each schema for easy evaluation during describe ops - if any
161
+ // CRUD op is set to true for a table in a schema, we set the schema READ perm to true
162
+ if (!finalPermissions[s].describe) {
163
+ crudPermKeys.forEach((key) => {
164
+ if (updatedTablePerms[key]) {
165
+ finalPermissions[s].describe = true;
166
+ }
167
+ });
168
+ }
169
+ finalPermissions[s].tables[t] = updatedTablePerms;
170
+ } else {
171
+ //if table is not included in role permissions, table perms set to false
172
+ finalPermissions[s].tables[t] = tablePermsTemplate();
173
+ }
174
+ });
175
+ } else {
176
+ //if schema is not included in role permissions, all table perms set to false
177
+ Object.keys(schema[s]).forEach((t) => {
178
+ finalPermissions[s].tables[t] = tablePermsTemplate();
179
+ });
180
+ }
181
+ });
182
+
183
+ return finalPermissions;
184
+ }
185
+
186
+ /**
187
+ * build out full access to describe & CRUD for all tables under a schema (used for structureUser)
188
+ * @param {Object} schema - The schema metadata
189
+ * @returns {{tables: {}, describe: boolean}}
190
+ */
191
+ function createStructureUserPermissions(schema) {
192
+ let finalPermissions = schemaPermsTemplate(true);
193
+ Object.keys(schema).forEach((t) => {
194
+ finalPermissions.tables[t] = tablePermsTemplate(true, true, true, true, true);
195
+ });
196
+
197
+ return finalPermissions;
198
+ }
199
+
200
+ /**
201
+ * Returns table-specific perms based on the existing permissions and schema for that table
202
+ *
203
+ * @param table_perms
204
+ * @param tableSchema
205
+ * @returns {{tableSpecificPerms}}
206
+ */
207
+ function getTableAttrPerms(table_perms, tableSchema) {
208
+ const { attribute_permissions } = table_perms;
209
+ const hasAttrPermissions = attribute_permissions?.length > 0;
210
+
211
+ if (hasAttrPermissions) {
212
+ //if table has attribute_permissions set, we need to loop through the table's schema and set attr-level perms
213
+ // based on the attr perms provided OR, if no perms provided for an attr, set attr perms to false
214
+ const finalTablePerms = { ...table_perms };
215
+ finalTablePerms.attribute_permissions = [];
216
+ const attrRMap = attribute_permissions.reduce((acc, item) => {
217
+ const { attribute_name } = item;
218
+ let attrPerms = item;
219
+ //if an system timestamp attr is included, we only set perms for READ and silently ignore/remove others
220
+ if (terms.TIME_STAMP_NAMES.includes(attribute_name)) {
221
+ attrPerms = timestampAttrPermsTemplate(attribute_name, item[READ]);
222
+ }
223
+ acc[attribute_name] = attrPerms;
224
+ return acc;
225
+ }, {});
226
+
227
+ const tableHash = tableSchema.primaryKey || tableSchema.hash_attribute;
228
+ const hashAttrPerm = !!attrRMap[tableHash];
229
+ //We need to check if all attribute permissions passed for a table are false because, if so, we do not need to
230
+ // force read permission for the table's hash value. If they are not and the hash value is not included in the
231
+ // attr perms, we need to make sure the user has read permission for the hash attr
232
+ const finalHashAttrPerms = attrPermsTemplate(tableHash);
233
+
234
+ tableSchema.attributes.forEach(({ attribute }) => {
235
+ if (attrRMap[attribute]) {
236
+ //if there is a permission set passed for current attribute, set it to the final perms object
237
+ let attrPermObj = attrRMap[attribute];
238
+ attrPermObj.describe = getAttributeDescribePerm(attrPermObj);
239
+ finalTablePerms.attribute_permissions.push(attrPermObj);
240
+ //if hash attr perms are not provided, check current CRUD perms values and make sure hashAttr is provided
241
+ // perms for any CRUD values that are set to true for other attributes
242
+ if (!hashAttrPerm) {
243
+ checkForHashPerms(attrPermObj, finalHashAttrPerms);
244
+ }
245
+ } else if (attribute !== tableHash) {
246
+ //if the attr isn't included in attr perms and isn't the hash, we set all perms to false
247
+ let attrPerms;
248
+ if (terms.TIME_STAMP_NAMES.includes(attribute)) {
249
+ attrPerms = timestampAttrPermsTemplate(attribute);
250
+ } else {
251
+ attrPerms = attrPermsTemplate(attribute);
252
+ }
253
+ finalTablePerms.attribute_permissions.push(attrPerms);
254
+ }
255
+ });
256
+
257
+ //final step is to ensure we include the correct hash attribute permissions in the final permissions object - if
258
+ // hash attr perms are included in the initial perms set, that will be handled above and we can skip this step
259
+ if (!hashAttrPerm) {
260
+ finalTablePerms.attribute_permissions.push(finalHashAttrPerms);
261
+ }
262
+
263
+ finalTablePerms.describe = getSchemaTableDescribePerm(finalTablePerms);
264
+ return finalTablePerms;
265
+ } else {
266
+ table_perms.describe = getSchemaTableDescribePerm(table_perms);
267
+ return table_perms;
268
+ }
269
+ }
270
+
271
+ /**
272
+ * This method takes a perm object and returns a boolean value for whether or not the schema item should be included in
273
+ * a describe operation for the role being evaluated
274
+ *
275
+ * @param permObj - the perm object to evaluate CRUD permissions for
276
+ * @returns {boolean} - returns TRUE if there is at least one CRUD perm set to TRUE
277
+ */
278
+ function getSchemaTableDescribePerm(permObj) {
279
+ return crudPermKeys.filter((perm) => permObj[perm]).length > 0;
280
+ }
281
+
282
+ function getAttributeDescribePerm(permObj) {
283
+ return attrCrudPermKeys.filter((perm) => permObj[perm]).length > 0;
284
+ }
285
+
286
+ /**
287
+ * Checks the attribute permissions object and updates the final hash attribute permissions, if necessary
288
+ *
289
+ * @param attrPermObj - perms for attribute being evaluated
290
+ * @param hashPerms - final perms object to update based on attribute being evaluated
291
+ * @returns {hashPerms} - final permissions object that will be assigned to the hash attribute
292
+ */
293
+ function checkForHashPerms(attrPermObj, hashPerms) {
294
+ attrCrudPermKeys.forEach((perm) => {
295
+ if (attrPermObj[perm] && !hashPerms[perm]) {
296
+ hashPerms[perm] = true;
297
+ hashPerms.describe = true;
298
+ }
299
+ });
300
+ }
@@ -0,0 +1,218 @@
1
+ 'use strict';
2
+
3
+ const insert = require('../dataLayer/insert.js');
4
+ const search = require('../dataLayer/search.js');
5
+ const delete_ = require('../dataLayer/delete.js');
6
+ const validation = require('../validation/role_validation.js');
7
+ const signalling = require('../utility/signalling.js');
8
+ const util = require('util');
9
+ const terms = require('../utility/hdbTerms.ts');
10
+ const hdbUtils = require('../utility/common_utils.js');
11
+ const { databases } = require('../resources/databases.ts');
12
+ const pSearchSearchByValue = search.searchByValue;
13
+ const pSearchSearchByHash = search.searchByHash;
14
+ const pDeleteDelete = util.promisify(delete_.delete);
15
+ const SearchObject = require('../dataLayer/SearchObject.js');
16
+ const SearchByHashObject = require('../dataLayer/SearchByHashObject.js');
17
+ const { hdbErrors, handleHDBError } = require('../utility/errors/hdbError.js');
18
+ const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
19
+ const { UserEventMsg } = require('../server/threads/itc.js');
20
+
21
+ module.exports = {
22
+ addRole,
23
+ alterRole,
24
+ dropRole,
25
+ listRoles,
26
+ getRoleByName,
27
+ };
28
+
29
+ function scrubRoleDetails(role) {
30
+ try {
31
+ if (role.hdb_auth_header) {
32
+ delete role.hdb_auth_header;
33
+ }
34
+ if (role.HDB_INTERNAL_PATH) {
35
+ delete role.HDB_INTERNAL_PATH;
36
+ }
37
+ if (role.operation) {
38
+ delete role.operation;
39
+ }
40
+ if (role.hdb_user) {
41
+ delete role.hdb_user;
42
+ }
43
+ } catch {
44
+ //no-op, failure is ok
45
+ }
46
+ return role;
47
+ }
48
+
49
+ async function addRole(role) {
50
+ let validationResp = validation.addRoleValidation(role);
51
+ if (validationResp) {
52
+ throw validationResp;
53
+ }
54
+
55
+ role = scrubRoleDetails(role);
56
+
57
+ let searchObj = {
58
+ schema: 'system',
59
+ table: 'hdb_role',
60
+ attribute: 'role',
61
+ value: role.role,
62
+ hash_attribute: 'id',
63
+ get_attributes: ['*'],
64
+ };
65
+
66
+ let searchRole;
67
+ try {
68
+ // here, and for other interactions, need convert to real array
69
+ searchRole = Array.from((await pSearchSearchByValue(searchObj)) || []);
70
+ } catch (err) {
71
+ throw handleHDBError(err);
72
+ }
73
+
74
+ if (searchRole && searchRole.length > 0) {
75
+ throw handleHDBError(
76
+ new Error(),
77
+ HDB_ERROR_MSGS.ROLE_ALREADY_EXISTS(role.role),
78
+ HTTP_STATUS_CODES.CONFLICT,
79
+ undefined,
80
+ undefined,
81
+ true
82
+ );
83
+ }
84
+
85
+ if (!role.id) role.id = role.role;
86
+
87
+ let insertObject = {
88
+ operation: 'insert',
89
+ schema: 'system',
90
+ table: 'hdb_role',
91
+ hash_attribute: 'id',
92
+ records: [role],
93
+ };
94
+
95
+ await insert.insert(insertObject);
96
+
97
+ signalling.signalUserChange(new UserEventMsg(process.pid));
98
+
99
+ role = scrubRoleDetails(role);
100
+ return role;
101
+ }
102
+
103
+ async function alterRole(role) {
104
+ let validationResp = validation.alterRoleValidation(role);
105
+ if (validationResp) {
106
+ throw validationResp;
107
+ }
108
+
109
+ role = scrubRoleDetails(role);
110
+
111
+ let updateObject = {
112
+ operation: 'update',
113
+ schema: 'system',
114
+ table: 'hdb_role',
115
+ records: [role],
116
+ };
117
+
118
+ let updateResponse;
119
+ try {
120
+ updateResponse = await insert.update(updateObject);
121
+ } catch (err) {
122
+ throw handleHDBError(err);
123
+ }
124
+
125
+ if (updateResponse && updateResponse?.message === 'updated 0 of 1 records') {
126
+ throw handleHDBError(new Error(), 'Invalid role id', HTTP_STATUS_CODES.BAD_REQUEST, undefined, undefined, true);
127
+ }
128
+
129
+ await signalling.signalUserChange(new UserEventMsg(process.pid));
130
+ return role;
131
+ }
132
+
133
+ async function dropRole(role) {
134
+ let validationResp = validation.dropRoleValidation(role);
135
+ if (validationResp) {
136
+ throw handleHDBError(new Error(), validationResp, HTTP_STATUS_CODES.BAD_REQUEST, undefined, undefined, true);
137
+ }
138
+
139
+ let roleIdSearch = new SearchByHashObject(
140
+ terms.SYSTEM_SCHEMA_NAME,
141
+ terms.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,
142
+ [role.id],
143
+ ['role']
144
+ );
145
+ let roleName = Array.from(await pSearchSearchByHash(roleIdSearch));
146
+
147
+ if (roleName.length === 0) {
148
+ throw handleHDBError(
149
+ new Error(),
150
+ HDB_ERROR_MSGS.ROLE_NOT_FOUND,
151
+ HTTP_STATUS_CODES.NOT_FOUND,
152
+ undefined,
153
+ undefined,
154
+ true
155
+ );
156
+ }
157
+
158
+ let searchUserByRoleid = new SearchObject(
159
+ terms.SYSTEM_SCHEMA_NAME,
160
+ terms.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,
161
+ 'role',
162
+ role.id,
163
+ undefined,
164
+ ['username', 'active']
165
+ );
166
+ let foundUsers = Array.from(await pSearchSearchByValue(searchUserByRoleid));
167
+ let activeUsers = false;
168
+ if (hdbUtils.isEmptyOrZeroLength(foundUsers) === false) {
169
+ for (let k = 0; k < foundUsers.length; k++) {
170
+ if (foundUsers[k].active === true) {
171
+ activeUsers = true;
172
+ break;
173
+ }
174
+ }
175
+ }
176
+
177
+ if (activeUsers === true) {
178
+ throw handleHDBError(
179
+ new Error(),
180
+ `Cannot drop role ${roleName[0].role} as it has active user(s) tied to this role`,
181
+ HTTP_STATUS_CODES.CONFLICT,
182
+ undefined,
183
+ undefined,
184
+ true
185
+ );
186
+ }
187
+
188
+ let deleteObject = {
189
+ table: 'hdb_role',
190
+ schema: 'system',
191
+ hash_values: [role.id],
192
+ };
193
+
194
+ await pDeleteDelete(deleteObject);
195
+
196
+ signalling.signalUserChange(new UserEventMsg(process.pid));
197
+ return `${roleName[0].role} successfully deleted`;
198
+ }
199
+
200
+ async function getRoleByName(roleName) {
201
+ for await (const role of databases.system.hdb_role.search([{ attribute: 'role', value: roleName }])) {
202
+ return role;
203
+ }
204
+ return null;
205
+ }
206
+
207
+ async function listRoles() {
208
+ let searchObj = {
209
+ table: 'hdb_role',
210
+ schema: 'system',
211
+ hash_attribute: 'id',
212
+ attribute: 'id',
213
+ value: '*',
214
+ get_attributes: ['*'],
215
+ };
216
+
217
+ return pSearchSearchByValue(searchObj);
218
+ }