@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,207 @@
1
+ 'use strict';
2
+
3
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
4
+ const lmdbTerms = require('../../../../utility/lmdb/terms.js');
5
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
6
+ const hdbUtils = require('../../../../utility/common_utils.js');
7
+ const { getTransactionAuditStorePath } = require('../lmdbUtility/initializePaths.js');
8
+ const searchUtility = require('../../../../utility/lmdb/searchUtility.js');
9
+ const LMDBTransactionObject = require('../lmdbUtility/LMDBTransactionObject.js');
10
+ const log = require('../../../../utility/logging/harper_logger.js');
11
+
12
+ module.exports = readAuditLog;
13
+
14
+ /**
15
+ * function execute the readTransactionLog operation
16
+ * @param {ReadAuditLogObject} readAuditLogObj
17
+ * @returns {Promise<[]>}
18
+ */
19
+ async function readAuditLog(readAuditLogObj) {
20
+ let basePath = getTransactionAuditStorePath(readAuditLogObj.schema, readAuditLogObj.table);
21
+ let env = await environmentUtility.openEnvironment(basePath, readAuditLogObj.table, true);
22
+ let allDbis = environmentUtility.listDBIs(env);
23
+
24
+ environmentUtility.initializeDBIs(env, lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP, allDbis);
25
+ let hash_attribute;
26
+ switch (readAuditLogObj.search_type) {
27
+ case hdbTerms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:
28
+ return searchTransactionsByTimestamp(env, readAuditLogObj.search_values);
29
+ case hdbTerms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:
30
+ //get the hash attribute
31
+ hash_attribute = global.hdb_schema[readAuditLogObj.schema][readAuditLogObj.table].hash_attribute;
32
+ return searchTransactionsByHashValues(env, readAuditLogObj.search_values, hash_attribute);
33
+ case hdbTerms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:
34
+ return searchTransactionsByUsername(env, readAuditLogObj.search_values);
35
+ default:
36
+ return searchTransactionsByTimestamp(env);
37
+ }
38
+ }
39
+
40
+ /**
41
+ *
42
+ * @param {lmdb.RootDatabase} env
43
+ * @param {[number]} timestamps - this must be undefined or a 1 or 2 element numeric array, representing a start timestamp & end end timestamp (element 1 must be less than element 2).
44
+ * If undefined or empty array is passed the function will iterate the entire transaction log.
45
+ * If only 1 element is supplied the second will be set to now UTC and the transaction log will be traversed from the designated start time until now.
46
+ * If 2 elements are supplied the transaction log will be read between the two timestamps
47
+ */
48
+ function searchTransactionsByTimestamp(env, timestamps = [0, Date.now()]) {
49
+ if (hdbUtils.isEmpty(timestamps[0])) {
50
+ timestamps[0] = 0;
51
+ }
52
+
53
+ if (hdbUtils.isEmpty(timestamps[1])) {
54
+ timestamps[1] = Date.now();
55
+ }
56
+
57
+ let timestampDbi = env.dbis[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];
58
+
59
+ //advance the endValue by 1 key
60
+ let nextValue;
61
+ for (let key of timestampDbi.getKeys({ start: timestamps[1] })) {
62
+ if (key !== timestamps[1]) {
63
+ nextValue = key;
64
+ break;
65
+ }
66
+ }
67
+
68
+ return timestampDbi
69
+ .getRange({ start: timestamps[0], end: nextValue })
70
+ .map(({ value }) => Object.assign(new LMDBTransactionObject(), value));
71
+ }
72
+
73
+ /**
74
+ *
75
+ * @param {lmdb.RootDatabase} env
76
+ * @param {[string]} usernames
77
+ */
78
+ function searchTransactionsByUsername(env, usernames = []) {
79
+ let results = new Map();
80
+ for (let x = 0; x < usernames.length; x++) {
81
+ let username = usernames[x];
82
+
83
+ let ids = [];
84
+ for (let value of env.dbis[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(username)) {
85
+ ids.push(value);
86
+ }
87
+
88
+ results.set(username, batchSearchTransactions(env, ids));
89
+ }
90
+
91
+ return Object.fromEntries(results);
92
+ }
93
+
94
+ /**
95
+ *
96
+ * @param {lmdb.RootDatabase} env
97
+ * @param {[string]} hash_values
98
+ * @param {string} hash_attribute
99
+ */
100
+ function searchTransactionsByHashValues(env, hash_values, hash_attribute) {
101
+ let timestampHashMap = new Map();
102
+ for (let x = 0, length = hash_values.length; x < length; x++) {
103
+ let hashValue = hash_values[x];
104
+ let hashResults = searchUtility.equals(
105
+ env,
106
+ lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,
107
+ lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,
108
+ hashValue
109
+ );
110
+
111
+ for (let { value } of hashResults) {
112
+ let numberKey = Number(value);
113
+ if (timestampHashMap.has(numberKey)) {
114
+ let entry = timestampHashMap.get(numberKey);
115
+ entry.push(hashValue.toString());
116
+ } else {
117
+ timestampHashMap.set(numberKey, [hashValue.toString()]);
118
+ }
119
+ }
120
+ }
121
+ let ids = Array.from(timestampHashMap.keys());
122
+ let txns = batchSearchTransactions(env, ids);
123
+
124
+ let resultsMap = new Map();
125
+ //iterate txns & pull out just the records related to the hash
126
+ for (let x = 0; x < txns.length; x++) {
127
+ let transaction = txns[x];
128
+ let timestamp = transaction.timestamp;
129
+ let hashes = timestampHashMap.get(timestamp);
130
+
131
+ loopRecords(transaction, 'records', hash_attribute, hashes, resultsMap);
132
+
133
+ loopRecords(transaction, 'original_records', hash_attribute, hashes, resultsMap);
134
+ }
135
+
136
+ return Object.fromEntries(resultsMap);
137
+ }
138
+
139
+ /**
140
+ *
141
+ * @param transaction
142
+ * @param recordsAttribute
143
+ * @param hash_attribute
144
+ * @param hashes
145
+ * @param resultsMap
146
+ */
147
+ function loopRecords(transaction, recordsAttribute, hash_attribute, hashes, resultsMap) {
148
+ let timestamp = transaction.timestamp;
149
+
150
+ if (transaction[recordsAttribute]) {
151
+ for (let y = 0; y < transaction[recordsAttribute].length; y++) {
152
+ let record = transaction[recordsAttribute][y];
153
+ let hashValue = record[hash_attribute].toString();
154
+ if (hashes.indexOf(hashValue) >= 0) {
155
+ if (resultsMap.has(hashValue)) {
156
+ let txnObjects = resultsMap.get(hashValue);
157
+ let txnObject = txnObjects[txnObjects.length - 1];
158
+
159
+ if (txnObject.timestamp === timestamp) {
160
+ txnObject[recordsAttribute] = [record];
161
+ } else {
162
+ let newTxnObject = new LMDBTransactionObject(
163
+ transaction.operation,
164
+ transaction.user_name,
165
+ timestamp,
166
+ undefined
167
+ );
168
+ newTxnObject[recordsAttribute] = [record];
169
+ txnObjects.push(newTxnObject);
170
+ }
171
+ } else {
172
+ let txnObject = new LMDBTransactionObject(transaction.operation, transaction.user_name, timestamp, undefined);
173
+ txnObject[recordsAttribute] = [record];
174
+ resultsMap.set(hashValue, [txnObject]);
175
+ }
176
+ }
177
+ }
178
+ }
179
+ }
180
+
181
+ /**
182
+ *
183
+ * @param env
184
+ * @param ids
185
+ * @returns {[LMDBTransactionObject]}
186
+ */
187
+ function batchSearchTransactions(env, ids) {
188
+ let results = [];
189
+ try {
190
+ //this sorts the ids numerically asc
191
+ let timestampDbi = env.dbis[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];
192
+ for (let x = 0; x < ids.length; x++) {
193
+ try {
194
+ let value = timestampDbi.get(ids[x]);
195
+ if (value) {
196
+ let txnRecord = Object.assign(new LMDBTransactionObject(), value);
197
+ results.push(txnRecord);
198
+ }
199
+ } catch (e) {
200
+ log.warn(e);
201
+ }
202
+ }
203
+ return results;
204
+ } catch (e) {
205
+ throw e;
206
+ }
207
+ }
@@ -0,0 +1,156 @@
1
+ 'use strict';
2
+
3
+ // eslint-disable-next-line no-unused-vars
4
+ const { SearchByConditionsObject, SearchCondition } = require('../../../SearchByConditionsObject.js');
5
+ const SearchObject = require('../../../SearchObject.js');
6
+ const searchValidator = require('../../../../validation/searchValidator.js');
7
+ const searchUtility = require('../../../../utility/lmdb/searchUtility.js');
8
+ const lmdbTerms = require('../../../../utility/lmdb/terms.js');
9
+ const lmdb_search = require('../lmdbUtility/lmdbSearch.js');
10
+ const cursorFunctions = require('../../../../utility/lmdb/searchCursorFunctions.js');
11
+ const _ = require('lodash');
12
+ const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
13
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
14
+ const { handleHDBError, hdbErrors } = require('../../../../utility/errors/hdbError.js');
15
+ const { HTTP_STATUS_CODES } = hdbErrors;
16
+ const RANGE_ESTIMATE = 100000000;
17
+
18
+ module.exports = lmdbSearchByConditions;
19
+
20
+ /**
21
+ * gets records by conditions - returns array of Objects
22
+ * @param {SearchByConditionsObject} searchObject
23
+ * @returns {Array.<Object>}
24
+ */
25
+ async function lmdbSearchByConditions(searchObject) {
26
+ let validationError = searchValidator(searchObject, 'conditions');
27
+ if (validationError) {
28
+ throw handleHDBError(
29
+ validationError,
30
+ validationError.message,
31
+ HTTP_STATUS_CODES.BAD_REQUEST,
32
+ undefined,
33
+ undefined,
34
+ true
35
+ );
36
+ }
37
+
38
+ //set the operator to always be lowercase for later evaluations
39
+ searchObject.operator = searchObject.operator ? searchObject.operator.toLowerCase() : undefined;
40
+
41
+ searchObject.offset = Number.isInteger(searchObject.offset) ? searchObject.offset : 0;
42
+ let schemaPath = getSchemaPath(searchObject.schema, searchObject.table);
43
+ let env = await environmentUtility.openEnvironment(schemaPath, searchObject.table);
44
+
45
+ const tableInfo = global.hdb_schema[searchObject.schema][searchObject.table];
46
+
47
+ // make sure the dbis have been opened prior to the read transaction starting
48
+ for (let condition of searchObject.conditions) {
49
+ environmentUtility.openDBI(env, condition.attribute);
50
+ }
51
+ // Sort the conditions by narrowest to broadest. Note that we want to do this both for intersection where
52
+ // it allows us to do minimal filtering, and for union where we can return the fastest results first
53
+ // in an iterator/stream.
54
+ let sortedConditions = _.sortBy(searchObject.conditions, (condition) => {
55
+ if (condition.estimated_count === undefined) {
56
+ // skip if it is cached
57
+ let searchType = condition.comparator;
58
+ if (searchType === lmdbTerms.SEARCH_TYPES.EQUALS)
59
+ // we only attempt to estimate count on equals operator because that's really all that LMDB supports (some other key-value stores like libmdbx could be considered if we need to do estimated counts of ranges at some point)
60
+ condition.estimated_count = searchUtility.count(env, condition.attribute, condition.value);
61
+ else if (searchType === lmdbTerms.SEARCH_TYPES.CONTAINS || searchType === lmdbTerms.SEARCH_TYPES.ENDS_WITH)
62
+ condition.estimated_count = Infinity;
63
+ // this search types can't/doesn't use indices, so try do them last
64
+ // for range queries (betweens, starts-with, greater, etc.), just arbitrarily guess
65
+ else condition.estimated_count = RANGE_ESTIMATE;
66
+ }
67
+ return condition.estimated_count; // use cached count
68
+ });
69
+ // we create the read transaction after ensuring that the dbis have been opened (necessary for a stable read
70
+ // transaction, and we really don't care if the
71
+ // counts are done in the same read transaction because they are just estimates.
72
+ let transaction = env.useReadTransaction();
73
+ transaction.database = env;
74
+ // both AND and OR start by getting an iterator for the ids for first condition
75
+ let ids = await executeConditionSearch(transaction, searchObject, sortedConditions[0], tableInfo.hash_attribute);
76
+ // and then things diverge...
77
+ let records;
78
+ if (!searchObject.operator || searchObject.operator.toLowerCase() === 'and') {
79
+ // get the intersection of condition searches by using the indexed query for the first condition
80
+ // and then filtering by all subsequent conditions
81
+ let primaryDbi = env.dbis[tableInfo.hash_attribute];
82
+ let filters = sortedConditions.slice(1).map(lmdb_search.filterByType);
83
+ let filtersLength = filters.length;
84
+ let fetchAttributes = searchUtility.setGetWholeRowAttributes(env, searchObject.get_attributes);
85
+ records = ids.map((id) => primaryDbi.get(id, { transaction, lazy: true }));
86
+ if (filtersLength > 0)
87
+ records = records.filter((record) => {
88
+ for (let i = 0; i < filtersLength; i++) {
89
+ if (!filters[i](record)) return false; // didn't match filters
90
+ }
91
+ return true;
92
+ });
93
+ if (searchObject.offset || searchObject.limit !== undefined)
94
+ records = records.slice(
95
+ searchObject.offset,
96
+ searchObject.limit !== undefined ? (searchObject.offset || 0) + searchObject.limit : undefined
97
+ );
98
+ records = records.map((record) => cursorFunctions.parseRow(record, fetchAttributes));
99
+ } else {
100
+ //get the union of ids from all condition searches
101
+ for (let i = 1; i < sortedConditions.length; i++) {
102
+ let condition = sortedConditions[i];
103
+ // might want to lazily execute this after getting to this point in the iteration
104
+ let nextIds = await executeConditionSearch(transaction, searchObject, condition, tableInfo.hash_attribute);
105
+ ids = ids.concat(nextIds);
106
+ }
107
+ let returnedIds = new Set();
108
+ let offset = searchObject.offset || 0;
109
+ ids = ids
110
+ .filter((id) => {
111
+ if (returnedIds.has(id))
112
+ // skip duplicates
113
+ return false;
114
+ returnedIds.add(id);
115
+ return true;
116
+ })
117
+ .slice(offset, searchObject.limit && searchObject.limit + offset);
118
+ records = searchUtility.batchSearchByHash(transaction, tableInfo.hash_attribute, searchObject.get_attributes, ids);
119
+ }
120
+ records.onDone = () => {
121
+ transaction.done(); // need to complete the transaction once iteration is complete
122
+ };
123
+ return records;
124
+ }
125
+
126
+ /**
127
+ *
128
+ * @param transaction
129
+ * @param {SearchByConditionsObject} searchObject
130
+ * @param {SearchCondition} condition
131
+ * @param {String} hash_attribute
132
+ * @returns {Promise<unknown[]>}
133
+ */
134
+ async function executeConditionSearch(transaction, searchObject, condition, hash_attribute) {
135
+ //build a prototype object for search
136
+ let search = new SearchObject(
137
+ searchObject.schema,
138
+ searchObject.table,
139
+ undefined,
140
+ undefined,
141
+ hash_attribute,
142
+ searchObject.get_attributes
143
+ );
144
+
145
+ //execute conditional search
146
+ let comparator = condition.comparator;
147
+ search.attribute = condition.attribute;
148
+
149
+ if (comparator === lmdbTerms.SEARCH_TYPES.BETWEEN) {
150
+ search.value = condition.value[0];
151
+ search.end_value = condition.value[1];
152
+ } else {
153
+ search.value = condition.value;
154
+ }
155
+ return lmdb_search.searchByType(transaction, search, comparator, hash_attribute).map((e) => e.value);
156
+ }
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ const searchUtility = require('../../../../utility/lmdb/searchUtility.js');
4
+ const hashSearchInit = require('../lmdbUtility/initializeHashSearch.js');
5
+
6
+ module.exports = lmdbSearchByHash;
7
+
8
+ /**
9
+ * fetches records by their hash values and returns an Array of the results
10
+ * @param {SearchByHashObject} searchObject
11
+ */
12
+ async function lmdbSearchByHash(searchObject) {
13
+ let environment = await hashSearchInit(searchObject);
14
+ const tableInfo = global.hdb_schema[searchObject.schema][searchObject.table];
15
+ return searchUtility.batchSearchByHash(
16
+ environment,
17
+ tableInfo.hash_attribute,
18
+ searchObject.get_attributes,
19
+ searchObject.hash_values
20
+ );
21
+ }
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ // eslint-disable-next-line no-unused-vars
4
+ const SearchObject = require('../../../SearchObject.js');
5
+ const searchValidator = require('../../../../validation/searchValidator.js');
6
+ const commonUtils = require('../../../../utility/common_utils.js');
7
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
8
+ const lmdb_search = require('../lmdbUtility/lmdbSearch.js');
9
+
10
+ module.exports = lmdbSearchByValue;
11
+
12
+ /**
13
+ * gets records by value - returns array of Objects
14
+ * @param {SearchObject} searchObject
15
+ * @param {hdbTerms.VALUE_SEARCH_COMPARATORS} [comparator]
16
+ * @returns {Promise<{}|{}[]>}
17
+ */
18
+ async function lmdbSearchByValue(searchObject, comparator) {
19
+ let comparatorSearch = !commonUtils.isEmpty(comparator);
20
+ if (comparatorSearch && hdbTerms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[comparator] === undefined) {
21
+ throw new Error(`Value search comparator - ${comparator} - is not valid`);
22
+ }
23
+
24
+ let validationError = searchValidator(searchObject, 'value');
25
+ if (validationError) {
26
+ throw validationError;
27
+ }
28
+
29
+ return lmdb_search.prepSearch(searchObject, comparator, false);
30
+ }
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ const { database } = require('../../../../resources/databases.ts');
4
+
5
+ module.exports = {
6
+ writeTransaction,
7
+ };
8
+
9
+ /**
10
+ * This is wrapper for write transactions, ensuring that all reads and writes within the callback occur atomically
11
+ * @param schema
12
+ * @param table
13
+ * @param callback
14
+ * @returns {Promise<any>}
15
+ */
16
+ async function writeTransaction(schema, table, callback) {
17
+ let rootStore = database({ database: schema, table });
18
+ return rootStore.transaction(callback);
19
+ }
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+
3
+ const insertUpdateValidate = require('../../bridgeUtility/insertUpdateValidate.js');
4
+ const lmdbProcessRows = require('../lmdbUtility/lmdbProcessRows.js');
5
+ const lmdbCheckNewAttributes = require('../lmdbUtility/lmdbCheckForNewAttributes.js');
6
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
7
+ const lmdb_update_records = require('../../../../utility/lmdb/writeUtility.js').updateRecords;
8
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
9
+ const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
10
+ const writeTransaction = require('../lmdbUtility/lmdbWriteTransaction.js');
11
+ const logger = require('../../../../utility/logging/harper_logger.js');
12
+
13
+ module.exports = lmdbUpdateRecords;
14
+
15
+ /**
16
+ * Orchestrates the update of data in LMDB and the creation of new attributes/dbis
17
+ * if they do not already exist.
18
+ * @param updateObj
19
+ * @returns {{skipped_hashes: *, written_hashes: *, schema_table: *}}
20
+ */
21
+ async function lmdbUpdateRecords(updateObj) {
22
+ try {
23
+ let { schemaTable, attributes } = insertUpdateValidate(updateObj);
24
+
25
+ lmdbProcessRows(updateObj, attributes, schemaTable.hash_attribute);
26
+
27
+ if (updateObj.schema !== hdbTerms.SYSTEM_SCHEMA_NAME) {
28
+ if (!attributes.includes(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME)) {
29
+ attributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME);
30
+ }
31
+
32
+ if (!attributes.includes(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)) {
33
+ attributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME);
34
+ }
35
+ }
36
+
37
+ let new_attributes = await lmdbCheckNewAttributes(updateObj.hdb_auth_header, schemaTable, attributes);
38
+ let envBasePath = getSchemaPath(updateObj.schema, updateObj.table);
39
+ let environment = await environmentUtility.openEnvironment(envBasePath, updateObj.table);
40
+ let lmdbResponse = await lmdb_update_records(
41
+ environment,
42
+ schemaTable.hash_attribute,
43
+ attributes,
44
+ updateObj.records,
45
+ updateObj.__origin?.timestamp
46
+ );
47
+
48
+ try {
49
+ await writeTransaction(updateObj, lmdbResponse);
50
+ } catch (e) {
51
+ logger.error(`unable to write transaction due to ${e.message}`);
52
+ }
53
+
54
+ return {
55
+ written_hashes: lmdbResponse.written_hashes,
56
+ skipped_hashes: lmdbResponse.skipped_hashes,
57
+ schemaTable,
58
+ new_attributes,
59
+ txn_time: lmdbResponse.txn_time,
60
+ };
61
+ } catch (err) {
62
+ throw err;
63
+ }
64
+ }
@@ -0,0 +1,70 @@
1
+ 'use strict';
2
+
3
+ // eslint-disable-next-line no-unused-vars
4
+ const UpsertObject = require('../../../dataObjects/UpsertObject.js');
5
+ const insertUpdateValidate = require('../../bridgeUtility/insertUpdateValidate.js');
6
+ const lmdbProcessRows = require('../lmdbUtility/lmdbProcessRows.js');
7
+ const lmdbCheckNewAttributes = require('../lmdbUtility/lmdbCheckForNewAttributes.js');
8
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
9
+ const lmdb_upsert_records = require('../../../../utility/lmdb/writeUtility.js').upsertRecords;
10
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
11
+ const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
12
+ const writeTransaction = require('../lmdbUtility/lmdbWriteTransaction.js');
13
+
14
+ const logger = require('../../../../utility/logging/harper_logger.js');
15
+ const { handleHDBError, hdbErrors } = require('../../../../utility/errors/hdbError.js');
16
+
17
+ module.exports = lmdbUpsertRecords;
18
+
19
+ /**
20
+ * Orchestrates the UPSERT of data in LMDB and the creation of new attributes/dbis
21
+ * if they do not already exist.
22
+ * @param {UpsertObject} upsertObj
23
+ * @returns {{ skipped_hashes: *, written_hashes: *, schema_table: *, new_attributes: *, txn_time: * }}
24
+ */
25
+ async function lmdbUpsertRecords(upsertObj) {
26
+ let validationResult;
27
+ try {
28
+ validationResult = insertUpdateValidate(upsertObj);
29
+ } catch (err) {
30
+ throw handleHDBError(err, err.message, hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST, undefined, undefined, true);
31
+ }
32
+
33
+ let { schemaTable, attributes } = validationResult;
34
+
35
+ lmdbProcessRows(upsertObj, attributes, schemaTable.hash_attribute);
36
+
37
+ if (upsertObj.schema !== hdbTerms.SYSTEM_SCHEMA_NAME) {
38
+ if (!attributes.includes(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME)) {
39
+ attributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME);
40
+ }
41
+
42
+ if (!attributes.includes(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)) {
43
+ attributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME);
44
+ }
45
+ }
46
+
47
+ let new_attributes = await lmdbCheckNewAttributes(upsertObj.hdb_auth_header, schemaTable, attributes);
48
+ let envBasePath = getSchemaPath(upsertObj.schema, upsertObj.table);
49
+ let environment = await environmentUtility.openEnvironment(envBasePath, upsertObj.table);
50
+ let lmdbResponse = await lmdb_upsert_records(
51
+ environment,
52
+ schemaTable.hash_attribute,
53
+ attributes,
54
+ upsertObj.records,
55
+ upsertObj.__origin?.timestamp
56
+ );
57
+
58
+ try {
59
+ await writeTransaction(upsertObj, lmdbResponse);
60
+ } catch (e) {
61
+ logger.error(`unable to write transaction due to ${e.message}`);
62
+ }
63
+
64
+ return {
65
+ written_hashes: lmdbResponse.written_hashes,
66
+ schemaTable,
67
+ new_attributes,
68
+ txn_time: lmdbResponse.txn_time,
69
+ };
70
+ }
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ const CreateAttributeObject = require('../../../CreateAttributeObject.js');
4
+
5
+ class LMDBCreateAttributeObject extends CreateAttributeObject {
6
+ /**
7
+ *
8
+ * @param {String} schema
9
+ * @param {String} table
10
+ * @param {String} attribute
11
+ * @param {*} [id] - optional, the predefined id for this attribute
12
+ * @param {Boolean} [dupSort] - optional, whether this attribute will allow duplicate keys in the lmdb dbi, defaults to true
13
+ * @param {Boolean} [isHashAttribute]
14
+ */
15
+ constructor(schema, table, attribute, id, dupSort = true, isHashAttribute = false) {
16
+ super(schema, table, attribute, id);
17
+ this.dup_sort = dupSort;
18
+ this.isPrimaryKey = isHashAttribute;
19
+ }
20
+ }
21
+
22
+ module.exports = LMDBCreateAttributeObject;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+ const LMDBTransactionObject = require('./LMDBTransactionObject.js');
3
+ const OPERATIONS_ENUM = require('../../../../utility/hdbTerms.ts').OPERATIONS_ENUM;
4
+
5
+ /**
6
+ * class to define a delete transaction
7
+ */
8
+ class LMDBDeleteTransactionObject extends LMDBTransactionObject {
9
+ /**
10
+ * @param {Array.<string|number>} hash_values - hash values of deleted records
11
+ * @param {Array.<Object>} originalRecords - original records prior to delete
12
+ * @param {string} userName - username that executed transaction
13
+ * @param {number} timestamp - timestamp of transaction
14
+ * @param {any} origin
15
+ */
16
+ constructor(hash_values, originalRecords, userName, timestamp, origin = undefined) {
17
+ super(OPERATIONS_ENUM.DELETE, userName, timestamp, hash_values, origin);
18
+ this.original_records = originalRecords;
19
+ //this.hash_values = hash_values;
20
+ }
21
+ }
22
+
23
+ module.exports = LMDBDeleteTransactionObject;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+ const LMDBTransactionObject = require('./LMDBTransactionObject.js');
3
+ const OPERATIONS_ENUM = require('../../../../utility/hdbTerms.ts').OPERATIONS_ENUM;
4
+
5
+ /**
6
+ * class to define an insert transaction
7
+ */
8
+ class LMDBInsertTransactionObject extends LMDBTransactionObject {
9
+ /**
10
+ * @param {Array.<Object>} records - inserted records
11
+ * @param {string} userName - username that executed trasaction
12
+ * @param {number} timestamp - timestamp of the transaction
13
+ * @param {[String|Number]} hash_values
14
+ * @param {any} origin
15
+ */
16
+ constructor(records, userName, timestamp, hash_values, origin = undefined) {
17
+ super(OPERATIONS_ENUM.INSERT, userName, timestamp, hash_values, origin);
18
+ this.records = records;
19
+ }
20
+ }
21
+
22
+ module.exports = LMDBInsertTransactionObject;
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * base class for transactions
5
+ */
6
+ class LMDBTransactionObject {
7
+ /**
8
+ * @param {string} operation - name of operation
9
+ * @param {string} userName - username that executed transaction
10
+ * @param {number} timestamp - timestamp of transaction
11
+ * @param {[string|number]} hash_values
12
+ * @param {any} origin
13
+ */
14
+ constructor(operation, userName, timestamp, hash_values, origin = undefined) {
15
+ this.operation = operation;
16
+ this.user_name = userName;
17
+ this.timestamp = timestamp;
18
+ this.hash_values = hash_values;
19
+ this.origin = origin;
20
+ }
21
+ }
22
+
23
+ module.exports = LMDBTransactionObject;