@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,28 @@
1
+ 'use strict';
2
+
3
+ module.exports = returnObject;
4
+
5
+ const INSERT_ACTION = 'inserted';
6
+
7
+ /**
8
+ * constructs return object for insert and update.
9
+ * @param action
10
+ * @param written_hashes
11
+ * @param object
12
+ * @param skipped
13
+ * @returns {{skipped_hashes: *, update_hashes: *, message: string}}
14
+ */
15
+ function returnObject(action, written_hashes, object, skipped) {
16
+ let return_object = {
17
+ message: `${action} ${written_hashes.length} of ${object.records.length} records`,
18
+ skipped_hashes: skipped,
19
+ };
20
+
21
+ if (action === INSERT_ACTION) {
22
+ return_object.inserted_hashes = written_hashes;
23
+ return return_object;
24
+ }
25
+
26
+ return_object.update_hashes = written_hashes;
27
+ return return_object;
28
+ }
@@ -0,0 +1,88 @@
1
+ 'use strict';
2
+
3
+ const hdbUtils = require('../../../utility/common_utils.js');
4
+ const log = require('../../../utility/logging/harper_logger.js');
5
+ const { getDatabases } = require('../../../resources/databases.ts');
6
+ const { ClientError } = require('../../../utility/errors/hdbError.js');
7
+
8
+ module.exports = insertUpdateValidate;
9
+
10
+ //IMPORTANT - This code is the same code as the async validation() function in dataLayer/insert - make sure any changes
11
+ // below are also made there. This is to resolve a circular dependency.
12
+ /**
13
+ * Takes an insert/update object and validates attributes, also looks for dups and get a list of all attributes from the record set
14
+ * @param {Object} writeObject
15
+ * @returns {Promise<{tableSchema, hashes: any[], attributes: string[]}>}
16
+ */
17
+ function insertUpdateValidate(writeObject) {
18
+ // Need to validate these outside of the validator as the getTableSchema call will fail with
19
+ // invalid values.
20
+
21
+ if (hdbUtils.isEmpty(writeObject)) {
22
+ throw new ClientError('invalid update parameters defined.');
23
+ }
24
+ if (hdbUtils.isEmptyOrZeroLength(writeObject.schema)) {
25
+ throw new ClientError('invalid schema specified.');
26
+ }
27
+ if (hdbUtils.isEmptyOrZeroLength(writeObject.table)) {
28
+ throw new ClientError('invalid table specified.');
29
+ }
30
+
31
+ if (!Array.isArray(writeObject.records)) {
32
+ throw new ClientError('records must be an array');
33
+ }
34
+
35
+ let schemaTable = getDatabases()[writeObject.schema]?.[writeObject.table];
36
+ if (hdbUtils.isEmpty(schemaTable)) {
37
+ throw new ClientError(`could not retrieve schema:${writeObject.schema} and table ${writeObject.table}`);
38
+ }
39
+
40
+ let hash_attribute = schemaTable.primaryKey;
41
+ let dups = new Set();
42
+ let attributes = {};
43
+
44
+ let isUpdate = false;
45
+ if (writeObject.operation === 'update') {
46
+ isUpdate = true;
47
+ }
48
+
49
+ writeObject.records.forEach((record) => {
50
+ if (isUpdate && hdbUtils.isEmptyOrZeroLength(record[hash_attribute])) {
51
+ log.error('a valid hash attribute must be provided with update record:', record);
52
+ throw new ClientError('a valid hash attribute must be provided with update record, check log for more info');
53
+ }
54
+
55
+ if (
56
+ !hdbUtils.isEmptyOrZeroLength(record[hash_attribute]) &&
57
+ (record[hash_attribute] === 'null' || record[hash_attribute] === 'undefined')
58
+ ) {
59
+ log.error(`a valid hash value must be provided with ${writeObject.operation} record:`, record);
60
+ throw new ClientError(
61
+ `Invalid hash value: '${record[hash_attribute]}' is not a valid hash attribute value, check log for more info`
62
+ );
63
+ }
64
+
65
+ if (
66
+ !hdbUtils.isEmpty(record[hash_attribute]) &&
67
+ record[hash_attribute] !== '' &&
68
+ dups.has(hdbUtils.autoCast(record[hash_attribute]))
69
+ ) {
70
+ record.skip = true;
71
+ }
72
+
73
+ dups.add(hdbUtils.autoCast(record[hash_attribute]));
74
+
75
+ for (let attr in record) {
76
+ attributes[attr] = 1;
77
+ }
78
+ });
79
+
80
+ //in case the hash_attribute was not on the object(s) for inserts where they want to auto-key we manually add the hash_attribute to attributes
81
+ attributes[hash_attribute] = 1;
82
+
83
+ return {
84
+ schema_table: schemaTable,
85
+ hashes: Array.from(dups),
86
+ attributes: Object.keys(attributes),
87
+ };
88
+ }
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ const { ResourceBridge } = require('./ResourceBridge.ts');
4
+ const envMngr = require('../../utility/environment/environmentManager.js');
5
+ envMngr.initSync();
6
+
7
+ let harperBridge;
8
+
9
+ /**
10
+ *
11
+ * @returns {LMDBBridge|undefined}
12
+ */
13
+ function getBridge() {
14
+ if (harperBridge) {
15
+ return harperBridge;
16
+ }
17
+ harperBridge = new ResourceBridge();
18
+ return harperBridge;
19
+ }
20
+
21
+ module.exports = getBridge();
@@ -0,0 +1,119 @@
1
+ 'use strict';
2
+
3
+ const log = require('../../../utility/logging/harper_logger.js');
4
+ const { handleHDBError } = require('../../../utility/errors/hdbError.js');
5
+ const BridgeMethods = require('../BridgeMethods.js');
6
+ const lmdbCreateAttribute = require('./lmdbMethods/lmdbCreateAttribute.js');
7
+ const lmdbCreateRecords = require('./lmdbMethods/lmdbCreateRecords.js');
8
+ const lmdbCreateSchema = require('./lmdbMethods/lmdbCreateSchema.js');
9
+ const lmdbDeleteRecords = require('./lmdbMethods/lmdbDeleteRecords.js');
10
+ const lmdbGetDataByHash = require('./lmdbMethods/lmdbGetDataByHash.js');
11
+ const lmdbSearchByHash = require('./lmdbMethods/lmdbSearchByHash.js');
12
+ const lmdbGetDataByValue = require('./lmdbMethods/lmdbGetDataByValue.js');
13
+ const lmdbSearchByValue = require('./lmdbMethods/lmdbSearchByValue.js');
14
+ const lmdbSearchByConditions = require('./lmdbMethods/lmdbSearchByConditions.js');
15
+ const lmdbDropSchema = require('./lmdbMethods/lmdbDropSchema.js');
16
+ const lmdbCreateTable = require('./lmdbMethods/lmdbCreateTable.js');
17
+ const lmdbUpdateRecords = require('./lmdbMethods/lmdbUpdateRecords.js');
18
+ const lmdbUpsertRecords = require('./lmdbMethods/lmdbUpsertRecords.js');
19
+ const lmdbDeleteAuditLogsBefore = require('./lmdbMethods/lmdbDeleteAuditLogsBefore.js');
20
+ const lmdbDropTable = require('./lmdbMethods/lmdbDropTable.js');
21
+ const lmdbDropAttribute = require('./lmdbMethods/lmdbDropAttribute.js');
22
+ const lmdbReadAuditLog = require('./lmdbMethods/lmdbReadAuditLog.js');
23
+ const lmdbTransaction = require('./lmdbMethods/lmdbTransaction.js');
24
+ const lmdbFlush = require('./lmdbMethods/lmdbFlush.js');
25
+ const lmdbGetBackup = require('./lmdbMethods/lmdbGetBackup.js');
26
+
27
+ class LMDBBridge extends BridgeMethods {
28
+ async searchByConditions(searchObject) {
29
+ return lmdbSearchByConditions(searchObject);
30
+ }
31
+
32
+ async getDataByHash(searchObject) {
33
+ return await lmdbGetDataByHash(searchObject);
34
+ }
35
+
36
+ async searchByHash(searchObject) {
37
+ return await lmdbSearchByHash(searchObject);
38
+ }
39
+
40
+ async getDataByValue(searchObject, comparator) {
41
+ return await lmdbGetDataByValue(searchObject, comparator);
42
+ }
43
+
44
+ async searchByValue(searchObject) {
45
+ return await lmdbSearchByValue(searchObject);
46
+ }
47
+
48
+ async createSchema(schemaCreateObj) {
49
+ return await lmdbCreateSchema(schemaCreateObj);
50
+ }
51
+
52
+ async dropSchema(dropSchemaObj) {
53
+ return await lmdbDropSchema(dropSchemaObj);
54
+ }
55
+
56
+ async createTable(table, tableCreateObj) {
57
+ return await lmdbCreateTable(table, tableCreateObj);
58
+ }
59
+
60
+ async dropTable(dropTableObj) {
61
+ return await lmdbDropTable(dropTableObj);
62
+ }
63
+
64
+ async createAttribute(createAttributeObj) {
65
+ return await lmdbCreateAttribute(createAttributeObj);
66
+ }
67
+
68
+ async createRecords(insertObj) {
69
+ return await lmdbCreateRecords(insertObj);
70
+ }
71
+
72
+ async updateRecords(updateObj) {
73
+ return await lmdbUpdateRecords(updateObj);
74
+ }
75
+
76
+ async upsertRecords(upsertObj) {
77
+ try {
78
+ return await lmdbUpsertRecords(upsertObj);
79
+ } catch (err) {
80
+ //NOTE: this method call will either return the HdbError generated below this OR create a new HdbError w/ the
81
+ // default system error msg and 500 code AND log the error caught here (the error log will only happen if the
82
+ // error has not already been handled (i.e. translated and passed as a HdbError)
83
+ throw handleHDBError(err, null, null, log.ERR, err);
84
+ }
85
+ }
86
+
87
+ async deleteRecords(deleteObj) {
88
+ return await lmdbDeleteRecords(deleteObj);
89
+ }
90
+
91
+ async dropAttribute(dropAttrObj) {
92
+ return await lmdbDropAttribute(dropAttrObj);
93
+ }
94
+
95
+ async deleteAuditLogsBefore(deleteObj) {
96
+ return await lmdbDeleteAuditLogsBefore(deleteObj);
97
+ }
98
+
99
+ async readAuditLog(readAuditLogObj) {
100
+ return await lmdbReadAuditLog(readAuditLogObj);
101
+ }
102
+
103
+ writeTransaction(schema, table, callback) {
104
+ return lmdbTransaction.writeTransaction(schema, table, callback);
105
+ }
106
+
107
+ flush(schema, table) {
108
+ return lmdbFlush.flush(schema, table);
109
+ }
110
+
111
+ resetReadTxn(schema, table) {
112
+ return lmdbFlush.resetReadTxn(schema, table);
113
+ }
114
+ getBackup(getBackupObj) {
115
+ return lmdbGetBackup(getBackupObj);
116
+ }
117
+ }
118
+
119
+ module.exports = LMDBBridge;
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * represents the response object from Delete audit logs Before
5
+ */
6
+ class DeleteAuditLogsBeforeResults {
7
+ /**
8
+ * @param {number} startTimestamp
9
+ * @param {number} endTimestamp
10
+ * @param {number} transactionsDeleted
11
+ */
12
+ constructor(startTimestamp = undefined, endTimestamp = undefined, transactionsDeleted = 0) {
13
+ this.start_timestamp = startTimestamp;
14
+ this.end_timestamp = endTimestamp;
15
+ this.transactions_deleted = transactionsDeleted;
16
+ }
17
+ }
18
+
19
+ module.exports = DeleteAuditLogsBeforeResults;
@@ -0,0 +1,112 @@
1
+ 'use strict';
2
+
3
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
4
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
5
+ const writeUtility = require('../../../../utility/lmdb/writeUtility.js');
6
+ const { getSystemSchemaPath, getSchemaPath } = require('../lmdbUtility/initializePaths.js');
7
+ const { validateBySchema } = require('../../../../validation/validationWrapper.js');
8
+ const Joi = require('joi');
9
+ const LMDBCreateAttributeObject = require('../lmdbUtility/LMDBCreateAttributeObject.js');
10
+ const returnObject = require('../../bridgeUtility/insertUpdateReturnObj.js');
11
+ const { handleHDBError, hdbErrors, ClientError } = require('../../../../utility/errors/hdbError.js');
12
+ const hdbUtils = require('../../../../utility/common_utils.js');
13
+ const { HTTP_STATUS_CODES } = hdbErrors;
14
+
15
+ const ACTION = 'inserted';
16
+
17
+ module.exports = lmdbCreateAttribute;
18
+
19
+ /**
20
+ * First adds the attribute to the system attribute table, then creates the dbi.
21
+ * @param {LMDBCreateAttributeObject} createAttributeObj
22
+ * @returns {{skipped_hashes: *, update_hashes: *, message: string}}
23
+ */
24
+ async function lmdbCreateAttribute(createAttributeObj) {
25
+ const validation = validateBySchema(
26
+ createAttributeObj,
27
+ Joi.object({
28
+ database: Joi.string(),
29
+ schema: Joi.string(),
30
+ table: Joi.string().required(),
31
+ attribute: Joi.string().required(),
32
+ })
33
+ );
34
+ if (validation) throw new ClientError(validation.message);
35
+
36
+ //check if schema.table does not exist throw error
37
+ let checkSchemaTable =
38
+ !createAttributeObj.skip_table_check &&
39
+ hdbUtils.checkGlobalSchemaTable(createAttributeObj.schema, createAttributeObj.table);
40
+ if (checkSchemaTable) {
41
+ throw handleHDBError(new Error(), checkSchemaTable, HTTP_STATUS_CODES.NOT_FOUND);
42
+ }
43
+
44
+ //the validator strings everything so we need to recast the booleans on createAttributeObj
45
+ createAttributeObj.isPrimaryKey = createAttributeObj.isPrimaryKey == 'true';
46
+ createAttributeObj.dup_sort = hdbUtils.isEmpty(createAttributeObj.dup_sort) || createAttributeObj.dup_sort == 'true';
47
+
48
+ let attributesObjArray = [];
49
+ //on initial creation of a table it will not exist in hdbSchema yet
50
+ if (
51
+ global.hdb_schema[createAttributeObj.schema] &&
52
+ global.hdb_schema[createAttributeObj.schema][createAttributeObj.table]
53
+ ) {
54
+ attributesObjArray = global.hdb_schema[createAttributeObj.schema][createAttributeObj.table]['attributes'];
55
+ }
56
+ if (Array.isArray(attributesObjArray) && attributesObjArray.length > 0) {
57
+ for (let attribute of attributesObjArray) {
58
+ if (attribute.attribute === createAttributeObj.attribute) {
59
+ throw new Error(
60
+ `attribute '${attribute.attribute}' already exists in ${createAttributeObj.schema}.${createAttributeObj.table}`
61
+ );
62
+ }
63
+ }
64
+ }
65
+
66
+ //insert the attribute metaData into system.hdb_attribute
67
+ let record = new LMDBCreateAttributeObject(
68
+ createAttributeObj.schema,
69
+ createAttributeObj.table,
70
+ createAttributeObj.attribute,
71
+ createAttributeObj.id
72
+ );
73
+
74
+ try {
75
+ //create dbi into the environment for this table
76
+ let env = await environmentUtility.openEnvironment(
77
+ getSchemaPath(createAttributeObj.schema, createAttributeObj.table),
78
+ createAttributeObj.table
79
+ );
80
+ if (env.dbis[createAttributeObj.attribute] !== undefined) {
81
+ throw new Error(
82
+ `attribute '${createAttributeObj.attribute}' already exists in ${createAttributeObj.schema}.${createAttributeObj.table}`
83
+ );
84
+ }
85
+ environmentUtility.createDBI(
86
+ env,
87
+ createAttributeObj.attribute,
88
+ createAttributeObj.dup_sort,
89
+ createAttributeObj.isPrimaryKey
90
+ );
91
+
92
+ let hdbAttributeEnv = await environmentUtility.openEnvironment(
93
+ getSystemSchemaPath(),
94
+ hdbTerms.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME
95
+ );
96
+
97
+ let { written_hashes, skipped_hashes } = await writeUtility.insertRecords(
98
+ hdbAttributeEnv,
99
+ // I'm not sure what else to do with these for now, but I do want to eslint to check the rest of the codebase
100
+ // for undefined vars. - WSM 2025-11-26
101
+ // eslint-disable-next-line no-undef
102
+ HDB_TABLE_INFO.hash_attribute,
103
+ // eslint-disable-next-line no-undef
104
+ hdbAttributeAttributes,
105
+ [record]
106
+ );
107
+
108
+ return returnObject(ACTION, written_hashes, { records: [record] }, skipped_hashes);
109
+ } catch (e) {
110
+ throw e;
111
+ }
112
+ }
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ const insertUpdateValidate = require('../../bridgeUtility/insertUpdateValidate.js');
4
+ // eslint-disable-next-line no-unused-vars
5
+ const InsertObject = require('../../../InsertObject.js');
6
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
7
+ const lmdbProcessRows = require('../lmdbUtility/lmdbProcessRows.js');
8
+ const lmdbInsertRecords = require('../../../../utility/lmdb/writeUtility.js').insertRecords;
9
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
10
+ const logger = require('../../../../utility/logging/harper_logger.js');
11
+
12
+ const lmdbCheckNewAttributes = require('../lmdbUtility/lmdbCheckForNewAttributes.js');
13
+ const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
14
+ const writeTransaction = require('../lmdbUtility/lmdbWriteTransaction.js');
15
+
16
+ module.exports = lmdbCreateRecords;
17
+
18
+ /**
19
+ * Orchestrates the insertion of data into LMDB and the creation of new attributes/dbis
20
+ * if they do not already exist.
21
+ * @param {InsertObject} insertObj
22
+ * @returns {Promise<{skipped_hashes: *, written_hashes: *, schema_table: *}>}
23
+ */
24
+ async function lmdbCreateRecords(insertObj) {
25
+ try {
26
+ let { schemaTable, attributes } = insertUpdateValidate(insertObj);
27
+
28
+ lmdbProcessRows(insertObj, attributes, schemaTable.hash_attribute);
29
+
30
+ if (insertObj.schema !== hdbTerms.SYSTEM_SCHEMA_NAME) {
31
+ if (!attributes.includes(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME)) {
32
+ attributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME);
33
+ }
34
+
35
+ if (!attributes.includes(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)) {
36
+ attributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME);
37
+ }
38
+ }
39
+
40
+ let new_attributes = await lmdbCheckNewAttributes(insertObj.hdb_auth_header, schemaTable, attributes);
41
+ let envBasePath = getSchemaPath(insertObj.schema, insertObj.table);
42
+ let environment = await environmentUtility.openEnvironment(envBasePath, insertObj.table);
43
+ let lmdbResponse = await lmdbInsertRecords(
44
+ environment,
45
+ schemaTable.hash_attribute,
46
+ attributes,
47
+ insertObj.records,
48
+ insertObj.__origin?.timestamp
49
+ );
50
+
51
+ try {
52
+ await writeTransaction(insertObj, lmdbResponse);
53
+ } catch (e) {
54
+ logger.error(`unable to write transaction due to ${e.message}`);
55
+ }
56
+
57
+ return {
58
+ written_hashes: lmdbResponse.written_hashes,
59
+ skipped_hashes: lmdbResponse.skipped_hashes,
60
+ schemaTable,
61
+ new_attributes,
62
+ txn_time: lmdbResponse.txn_time,
63
+ };
64
+ } catch (err) {
65
+ throw err;
66
+ }
67
+ }
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
4
+ const lmdbCreateRecords = require('./lmdbCreateRecords.js');
5
+ const InsertObject = require('../../../InsertObject.js');
6
+ const fs = require('fs-extra');
7
+ const { getSchemaPath } = require('../lmdbUtility/initializePaths.js');
8
+
9
+ module.exports = lmdbCreateSchema;
10
+
11
+ /**
12
+ * creates the meta data for the schema
13
+ * @param createSchemaObj
14
+ */
15
+ async function lmdbCreateSchema(createSchemaObj) {
16
+ let records = [
17
+ {
18
+ name: createSchemaObj.schema,
19
+ createddate: Date.now(),
20
+ },
21
+ ];
22
+ let insertObject = new InsertObject(
23
+ hdbTerms.SYSTEM_SCHEMA_NAME,
24
+ hdbTerms.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,
25
+ undefined,
26
+ records
27
+ );
28
+
29
+ await lmdbCreateRecords(insertObject);
30
+ await fs.mkdirp(getSchemaPath(createSchemaObj.schema));
31
+ }
@@ -0,0 +1,94 @@
1
+ 'use strict';
2
+
3
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
4
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
5
+ const writeUtility = require('../../../../utility/lmdb/writeUtility.js');
6
+ const { getSystemSchemaPath, getSchemaPath } = require('../lmdbUtility/initializePaths.js');
7
+ const lmdbCreateAttribute = require('./lmdbCreateAttribute.js');
8
+ const LMDBCreateAttributeObject = require('../lmdbUtility/LMDBCreateAttributeObject.js');
9
+ const log = require('../../../../utility/logging/harper_logger.js');
10
+ const createTxnEnvironments = require('../lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js');
11
+
12
+ module.exports = lmdbCreateTable;
13
+
14
+ /**
15
+ * Writes new table data to the system tables creates the environment file and creates two datastores to track created and updated
16
+ * timestamps for new table data.
17
+ * @param tableSystemData
18
+ * @param tableCreateObj
19
+ */
20
+ async function lmdbCreateTable(tableSystemData, tableCreateObj) {
21
+ let schemaPath = getSchemaPath(tableCreateObj.schema, tableCreateObj.table);
22
+
23
+ let createdTimeAttr = new LMDBCreateAttributeObject(
24
+ tableCreateObj.schema,
25
+ tableCreateObj.table,
26
+ hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME,
27
+ undefined,
28
+ true
29
+ );
30
+ let updatedTimeAttr = new LMDBCreateAttributeObject(
31
+ tableCreateObj.schema,
32
+ tableCreateObj.table,
33
+ hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,
34
+ undefined,
35
+ true
36
+ );
37
+ let hashAttr = new LMDBCreateAttributeObject(
38
+ tableCreateObj.schema,
39
+ tableCreateObj.table,
40
+ tableCreateObj.hash_attribute,
41
+ undefined,
42
+ false,
43
+ true
44
+ );
45
+
46
+ try {
47
+ //create the new environment
48
+ await environmentUtility.createEnvironment(schemaPath, tableCreateObj.table);
49
+
50
+ if (tableSystemData !== undefined) {
51
+ let hdbTableEnv = await environmentUtility.openEnvironment(
52
+ getSystemSchemaPath(),
53
+ hdbTerms.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME
54
+ );
55
+
56
+ //add the meta data to system.hdb_table
57
+ await writeUtility.insertRecords(
58
+ hdbTableEnv,
59
+ // I'm not sure what else to do with these for now, but I do want to eslint to check the rest of the codebase
60
+ // for undefined vars. - WSM 2025-11-26
61
+ // eslint-disable-next-line no-undef
62
+ HDB_TABLE_INFO.hash_attribute,
63
+ // eslint-disable-next-line no-undef
64
+ hdbTableAttributes,
65
+ [tableSystemData]
66
+ );
67
+ //create attributes for hash attribute created/updated time stamps
68
+ createdTimeAttr.skip_table_check = true;
69
+ updatedTimeAttr.skip_table_check = true;
70
+ hashAttr.skip_table_check = true;
71
+
72
+ await createAttribute(createdTimeAttr);
73
+ await createAttribute(updatedTimeAttr);
74
+ await createAttribute(hashAttr);
75
+ }
76
+
77
+ await createTxnEnvironments(tableCreateObj);
78
+ } catch (e) {
79
+ throw e;
80
+ }
81
+ }
82
+
83
+ /**
84
+ * used to individually create the required attributes for a new table, logs a warning if any fail
85
+ * @param {LMDBCreateAttributeObject} attributeObject
86
+ * @returns {Promise<void>}
87
+ */
88
+ async function createAttribute(attributeObject) {
89
+ try {
90
+ await lmdbCreateAttribute(attributeObject);
91
+ } catch (e) {
92
+ log.warn(`failed to create attribute ${attributeObject.attribute} due to ${e.message}`);
93
+ }
94
+ }
@@ -0,0 +1,98 @@
1
+ 'use strict';
2
+
3
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
4
+ const { getTransactionAuditStorePath } = require('../lmdbUtility/initializePaths.js');
5
+ // eslint-disable-next-line no-unused-vars
6
+ const DeleteBeforeObject = require('../../../DeleteBeforeObject.js');
7
+ const lmdbTerms = require('../../../../utility/lmdb/terms.js');
8
+ const hdbUtils = require('../../../../utility/common_utils.js');
9
+ const DeleteAuditLogsBeforeResults = require('./DeleteAuditLogsBeforeResults.js');
10
+ const promisify = require('util').promisify;
11
+ const pSettimeout = promisify(setTimeout);
12
+
13
+ const BATCH_SIZE = 10000;
14
+ const SLEEP_TIME_MS = 100;
15
+
16
+ module.exports = deleteAuditLogsBefore;
17
+
18
+ /**
19
+ *
20
+ * @param {DeleteBeforeObject} deleteAuditLogsObj
21
+ */
22
+ async function deleteAuditLogsBefore(deleteAuditLogsObj) {
23
+ let schemaPath = getTransactionAuditStorePath(deleteAuditLogsObj.schema, deleteAuditLogsObj.table);
24
+ let env = await environmentUtility.openEnvironment(schemaPath, deleteAuditLogsObj.table, true);
25
+ let allDbis = environmentUtility.listDBIs(env);
26
+ environmentUtility.initializeDBIs(env, lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP, allDbis);
27
+
28
+ let chunkResults;
29
+ let totalResults = new DeleteAuditLogsBeforeResults();
30
+
31
+ do {
32
+ chunkResults = await deleteTransactions(env, deleteAuditLogsObj.timestamp);
33
+ if (totalResults.start_timestamp === undefined) {
34
+ totalResults.start_timestamp = chunkResults.start_timestamp;
35
+ }
36
+
37
+ if (chunkResults.end_timestamp !== undefined) {
38
+ totalResults.end_timestamp = chunkResults.end_timestamp;
39
+ }
40
+
41
+ totalResults.transactions_deleted += chunkResults.transactions_deleted;
42
+
43
+ //we do a pause on delete so it opens access to the txn environment for other processes.
44
+ await pSettimeout(SLEEP_TIME_MS);
45
+ } while (chunkResults.transactions_deleted > 0);
46
+
47
+ return totalResults;
48
+ }
49
+
50
+ /**
51
+ *
52
+ * @param env
53
+ * @param {number} timestamp
54
+ * @returns {Promise<DeleteAuditLogsBeforeResults>}
55
+ */
56
+ async function deleteTransactions(env, timestamp) {
57
+ let results = new DeleteAuditLogsBeforeResults();
58
+ try {
59
+ let timestampDbi = env.dbis[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];
60
+
61
+ let promise;
62
+ for (let { key, value: txnRecord } of timestampDbi.getRange({ start: false })) {
63
+ if (key >= timestamp) {
64
+ break;
65
+ }
66
+
67
+ if (results.start_timestamp === undefined) {
68
+ results.start_timestamp = key;
69
+ }
70
+
71
+ //delete the transaction record
72
+ promise = timestampDbi.remove(key);
73
+
74
+ //delete user index entry
75
+ let userName = txnRecord[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];
76
+ if (!hdbUtils.isEmpty(userName)) {
77
+ promise = env.dbis[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(userName, key);
78
+ }
79
+
80
+ //delete each hash value entry
81
+ for (let k = 0; k < txnRecord.hash_values.length; k++) {
82
+ promise = env.dbis[lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(txnRecord.hash_values[k], key);
83
+ }
84
+
85
+ results.transactions_deleted++;
86
+ results.end_timestamp = key;
87
+ if (results.transactions_deleted > BATCH_SIZE) {
88
+ break;
89
+ }
90
+ }
91
+ // we wait for the last promise to finish
92
+ await promise;
93
+
94
+ return results;
95
+ } catch (e) {
96
+ throw e;
97
+ }
98
+ }