@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,254 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Module meant as an intermediary between the hdbInfo table and the upgrade/install processes. Please update
5
+ * MINIMUM_SUPPORTED_VERSION_NUM as needed.
6
+ */
7
+
8
+ const util = require('util');
9
+ const chalk = require('chalk');
10
+ const os = require('os');
11
+
12
+ const insert = require('./insert.js');
13
+ const search = require('./search.js');
14
+ const hdbTerms = require('../utility/hdbTerms.ts');
15
+ const BinObjects = require('../bin/BinObjects.js');
16
+ const DataLayerObjects = require('./DataLayerObjects.js');
17
+ const { UpgradeObject } = require('../upgrade/UpgradeObjects.js');
18
+ const { forceDowngradePrompt } = require('../upgrade/upgradePrompt.js');
19
+ const { packageJson } = require('../utility/packageUtils.js');
20
+ const log = require('../utility/logging/harper_logger.js');
21
+ const hdbUtils = require('../utility/common_utils.js');
22
+ const globalSchema = require('../utility/globalSchema.js');
23
+ const tableLoader = require('../resources/databases.ts');
24
+ const directiveManager = require('../upgrade/directives/directivesController.js');
25
+ let pSetSchemaDataToGlobal = util.promisify(globalSchema.setSchemaDataToGlobal);
26
+
27
+ let pSearchSearchByValue = search.searchByValue;
28
+
29
+ const HDB_INFO_SEARCH_ATTRIBUTE = 'info_id';
30
+
31
+ // This is the value we use to set a default/stubbed 'data version' number for HDB instances installed before
32
+ // version 3.0.0 in order to allow our version comparison functions to evaluate correctly. B/c most/all older versions
33
+ // will NOT have a hdbInfo record from their previous install, we need to stub this data so that the 3.0.0 upgrade
34
+ // directives - and any additional upgrade directives that may be added later (if they do not upgrade right away) - are
35
+ // identified and run when the upgrade eventually happens.
36
+ const DEFAULT_DATA_VERSION_NUM = '2.9.9';
37
+ // This value should change as supported versions change.
38
+ const MINIMUM_SUPPORTED_VERSION_NUM = '3.0.0';
39
+
40
+ /**
41
+ * * Insert a row into hdbInfo with the initial version data at install.
42
+ *
43
+ * @param newVersionString - The version of this install
44
+ * @returns {Promise<{message: string, new_attributes: *, txn_time: *}|undefined>}
45
+ */
46
+ async function insertHdbInstallInfo(newVersionString) {
47
+ const infoTableInsertObject = new BinObjects.HdbInfoInsertObject(1, newVersionString, newVersionString);
48
+
49
+ //Insert the initial version record into the hdbInfo table.
50
+ let insertObject = new DataLayerObjects.InsertObject(
51
+ hdbTerms.OPERATIONS_ENUM.INSERT,
52
+ hdbTerms.SYSTEM_SCHEMA_NAME,
53
+ hdbTerms.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,
54
+ hdbTerms.INFO_TABLE_HASH_ATTRIBUTE,
55
+ [infoTableInsertObject]
56
+ );
57
+ globalSchema.setSchemaDataToGlobal();
58
+ return insert.insert(insertObject);
59
+ }
60
+
61
+ /**
62
+ * This method inserts the new 'hdb_info' record after the upgrade process has completed with the new version value for the
63
+ * hdb software version and data version.
64
+ *
65
+ * @param newVersionString
66
+ * @returns {Promise<void>}
67
+ */
68
+ async function insertHdbUpgradeInfo(newVersionString) {
69
+ let newInfoRecord;
70
+ let versionData = await getAllHdbInfoRecords();
71
+
72
+ // always have a 0 in case the search returned nothing. That way we will have an entry at 1 if there are no rows returned due to table
73
+ // not existing (upgrade from old install).
74
+ let vals = new Map([[0, {}]]);
75
+ for (const vers of versionData) {
76
+ vals.set(vers.info_id, vers);
77
+ }
78
+
79
+ // get the largest
80
+ const latestId = Math.max.apply(null, [...vals.keys()]);
81
+ const newId = latestId + 1;
82
+ newInfoRecord = new BinObjects.HdbInfoInsertObject(newId, newVersionString, newVersionString);
83
+
84
+ //Insert the most recent record with the new data version in the hdbInfo system table.
85
+ let insertObject = new DataLayerObjects.InsertObject(
86
+ hdbTerms.OPERATIONS_ENUM.INSERT,
87
+ hdbTerms.SYSTEM_SCHEMA_NAME,
88
+ hdbTerms.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,
89
+ hdbTerms.INFO_TABLE_HASH_ATTRIBUTE,
90
+ [newInfoRecord]
91
+ );
92
+
93
+ await pSetSchemaDataToGlobal();
94
+ return insert.insert(insertObject);
95
+ }
96
+
97
+ /**
98
+ * Returns all records from the 'hdb_info' system table
99
+ * @returns {Promise<[]>}
100
+ */
101
+ async function getAllHdbInfoRecords() {
102
+ // get the latest hdbInfo id
103
+ let searchObj = new DataLayerObjects.NoSQLSeachObject(
104
+ hdbTerms.SYSTEM_SCHEMA_NAME,
105
+ hdbTerms.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,
106
+ HDB_INFO_SEARCH_ATTRIBUTE,
107
+ hdbTerms.INFO_TABLE_HASH_ATTRIBUTE,
108
+ ['*'],
109
+ '*'
110
+ );
111
+
112
+ // Using a NoSql search and filter to get the largest infoId, as running SQL searches internally is difficult.
113
+ let versionData = [];
114
+ try {
115
+ versionData = Array.from(await pSearchSearchByValue(searchObj));
116
+ } catch (err) {
117
+ // search may fail during a new install as the table doesn't exist yet or initial upgrade for 3.0. This is ok,
118
+ // we will assume an id of 0 below.
119
+ console.error(err);
120
+ }
121
+
122
+ return versionData;
123
+ }
124
+
125
+ /**
126
+ * This method grabs all rows from the hbdInfo table and returns the most recent record
127
+ *
128
+ * @returns {Promise<*>} - the most recent record OR undefined (if no records exist in the table)
129
+ */
130
+ async function getLatestHdbInfoRecord() {
131
+ let versionData = await getAllHdbInfoRecords();
132
+
133
+ //This scenario means that new software has been downloaded but harperdb install has not been run so
134
+ // we need to run the upgrade for 3.0
135
+ if (versionData.length === 0) {
136
+ return;
137
+ }
138
+
139
+ let currentInfoRecord;
140
+ // always have a 0 in case the search returned nothing. That way we will have an entry at 1 if there are no rows returned due to table
141
+ // not existing (upgrade from old install).
142
+ let versionMap = new Map();
143
+ for (const vers of versionData) {
144
+ versionMap.set(vers.info_id, vers);
145
+ }
146
+
147
+ // get the largest which will be the most recent
148
+ const latestId = Math.max.apply(null, [...versionMap.keys()]);
149
+ currentInfoRecord = versionMap.get(latestId);
150
+
151
+ return currentInfoRecord;
152
+ }
153
+
154
+ /**
155
+ * This method is used in bin/run.js to evaluate if an upgrade is required for the HDB instance. If one is needed,
156
+ * the method returns an UpgradeObject w/ the version number of the hdb software/instance and the older version number that
157
+ * the data is on.
158
+ *
159
+ * @returns {Promise<UpgradeObject> || undefined} - returns an UpgradeObject, if an upgrade is required, OR undefined, if not.
160
+ */
161
+ async function getVersionUpdateInfo() {
162
+ log.info('Checking if HDB software has been updated');
163
+ try {
164
+ const upgradeVersion = packageJson.version;
165
+ if (!upgradeVersion) {
166
+ throw new Error('Could not find the version number in the package.json file');
167
+ }
168
+ const latestInfoRecord = await getLatestHdbInfoRecord();
169
+
170
+ let dataVersion;
171
+
172
+ if (hdbUtils.isEmpty(latestInfoRecord)) {
173
+ // If there's no record, then there's no hdbInfo table. If there's no hdbInfo table, we know it comes before 3.0.0.
174
+ // We assign the default version number to aptly make upgrade decisions
175
+ dataVersion = DEFAULT_DATA_VERSION_NUM;
176
+ } else {
177
+ dataVersion = latestInfoRecord.data_version_num;
178
+ if (hdbUtils.compareVersions(dataVersion.toString(), upgradeVersion.toString()) > 0) {
179
+ if (!hdbUtils.isCompatibleDataVersion(dataVersion.toString(), upgradeVersion.toString())) {
180
+ console.log(chalk.yellow(`This instance's data was last run on version ${dataVersion}`));
181
+ console.error(
182
+ chalk.red(
183
+ `You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${os.EOL}${hdbTerms.SUPPORT_HELP_MSG}`
184
+ )
185
+ );
186
+ throw new Error('Trying to downgrade major HDB versions is not supported.');
187
+ }
188
+ if (!hdbUtils.isCompatibleDataVersion(dataVersion.toString(), upgradeVersion.toString(), true)) {
189
+ console.log(chalk.yellow(`This instance's data was last run on version ${dataVersion}`));
190
+
191
+ if (await forceDowngradePrompt(new UpgradeObject(dataVersion, upgradeVersion))) {
192
+ await insertHdbUpgradeInfo(upgradeVersion.toString());
193
+ } else {
194
+ console.log('Cancelled downgrade, closing Harper');
195
+ process.exit(0);
196
+ }
197
+ }
198
+ }
199
+ }
200
+
201
+ globalSchema.setSchemaDataToGlobal();
202
+ checkIfInstallIsSupported(dataVersion);
203
+
204
+ if (upgradeVersion.toString() === dataVersion.toString()) {
205
+ //versions are up to date so nothing to do here
206
+ return;
207
+ }
208
+
209
+ const newUpgradeObj = new UpgradeObject(dataVersion, upgradeVersion);
210
+ // We only want to prompt for a reinstall if there are updates that need to be made. If there are no new version
211
+ // update directives between the two versions, we can skip by returning undefined
212
+ const upgradeRequired = directiveManager.hasUpgradesRequired(newUpgradeObj);
213
+ if (upgradeRequired) {
214
+ return newUpgradeObj;
215
+ }
216
+
217
+ // If we get here they are running on an upgraded version that doesn't require any upgrade directives
218
+ if (hdbUtils.compareVersions(newUpgradeObj.data_version.toString(), newUpgradeObj.upgrade_version.toString()) < 0) {
219
+ await insertHdbUpgradeInfo(newUpgradeObj.upgrade_version);
220
+ log.notify(`Harper running on upgraded version: ${newUpgradeObj.upgrade_version}`);
221
+ }
222
+ } catch (err) {
223
+ log.fatal('Error while trying to evaluate the state of hdb data and the installed hdb version');
224
+ log.fatal(err);
225
+ throw err;
226
+ }
227
+ }
228
+
229
+ /**
230
+ * First we check for the existence of the info table--this rejects too old versions.
231
+ * Next we ensure the version is currently supported against our defined variable, MINIMUM_SUPPORTED_VERSION_NUM
232
+ * @param dataVNum - string of version number
233
+ */
234
+ function checkIfInstallIsSupported(dataVNum) {
235
+ const errMsg =
236
+ 'You are attempting to upgrade from an old instance of Harper that is no longer supported. ' +
237
+ 'In order to upgrade to this version, you must do a fresh install. If you need support, ' +
238
+ `please contact ${hdbTerms.HDB_SUPPORT_ADDRESS}`;
239
+
240
+ if (!('hdb_info' in tableLoader.databases.system)) {
241
+ console.log(errMsg);
242
+ throw new Error(errMsg);
243
+ }
244
+ if (!hdbUtils.isEmpty(dataVNum) && dataVNum < MINIMUM_SUPPORTED_VERSION_NUM) {
245
+ console.log(errMsg);
246
+ throw new Error(errMsg);
247
+ }
248
+ }
249
+
250
+ module.exports = {
251
+ insertHdbInstallInfo,
252
+ insertHdbUpgradeInfo,
253
+ getVersionUpdateInfo,
254
+ };
@@ -0,0 +1,266 @@
1
+ 'use strict';
2
+
3
+ /***
4
+ * INSERT.JS
5
+ *
6
+ * This module is used to validate and insert or update data. Note insert.update should be used over the update module,
7
+ * as the update module is meant to be used in more specific circumstances.
8
+ */
9
+ const insertValidator = require('../validation/insertValidator.js');
10
+ const hdbUtils = require('../utility/common_utils.js');
11
+ const util = require('util');
12
+ // Leave this unused signalling import here. Due to circular dependencies we bring it in early to load it before the bridge
13
+ const harperBridge = require('./harperBridge/harperBridge.js');
14
+ const globalSchema = require('../utility/globalSchema.js');
15
+ const log = require('../utility/logging/harper_logger.js');
16
+ const { handleHDBError, hdbErrors } = require('../utility/errors/hdbError.js');
17
+ const { HTTP_STATUS_CODES } = hdbErrors;
18
+
19
+ const pGlobalSchema = util.promisify(globalSchema.getTableSchema);
20
+
21
+ const UPDATE_ACTION = 'updated';
22
+ const INSERT_ACTION = 'inserted';
23
+ const UPSERT_ACTION = 'upserted';
24
+
25
+ module.exports = {
26
+ insert: insertData,
27
+ update: updateData,
28
+ upsert: upsertData,
29
+ validation,
30
+ flush,
31
+ };
32
+
33
+ //IMPORTANT - This validation function is the async version of the code in harperBridge/bridgeUtility/insertUpdateValidate.js
34
+ // make sure any changes below are also made there. This is to resolve a circular dependency.
35
+ /**
36
+ * Takes an insert/update object and validates attributes, also looks for dups and get a list of all attributes from the record set
37
+ * @param {Object} writeObject
38
+ * @returns {Promise<{tableSchema, hashes: any[], attributes: string[]}>}
39
+ */
40
+ async function validation(writeObject) {
41
+ // Need to validate these outside of the validator as the getTableSchema call will fail with
42
+ // invalid values.
43
+
44
+ if (hdbUtils.isEmpty(writeObject)) {
45
+ throw new Error('invalid update parameters defined.');
46
+ }
47
+ if (hdbUtils.isEmptyOrZeroLength(writeObject.schema)) {
48
+ throw new Error('invalid database specified.');
49
+ }
50
+ if (hdbUtils.isEmptyOrZeroLength(writeObject.table)) {
51
+ throw new Error('invalid table specified.');
52
+ }
53
+
54
+ let schemaTable = await pGlobalSchema(writeObject.schema, writeObject.table);
55
+
56
+ //validate insertObject for required attributes
57
+ let validator = insertValidator(writeObject);
58
+ if (validator) {
59
+ throw validator;
60
+ }
61
+
62
+ if (!Array.isArray(writeObject.records)) {
63
+ throw new Error('records must be an array');
64
+ }
65
+
66
+ let hash_attribute = schemaTable.hash_attribute;
67
+ let dups = new Set();
68
+ let attributes = {};
69
+
70
+ let isUpdate = false;
71
+ if (writeObject.operation === 'update') {
72
+ isUpdate = true;
73
+ }
74
+
75
+ writeObject.records.forEach((record) => {
76
+ if (isUpdate && hdbUtils.isEmptyOrZeroLength(record[hash_attribute])) {
77
+ log.error('a valid hash attribute must be provided with update record:', record);
78
+ throw new Error('a valid hash attribute must be provided with update record');
79
+ }
80
+
81
+ if (
82
+ !hdbUtils.isEmptyOrZeroLength(record[hash_attribute]) &&
83
+ (record[hash_attribute] === 'null' || record[hash_attribute] === 'undefined')
84
+ ) {
85
+ log.error(`a valid hash value must be provided with ${writeObject.operation} record:`, record);
86
+ throw new Error(`"${record[hash_attribute]}" is not a valid hash attribute value`);
87
+ }
88
+
89
+ if (
90
+ !hdbUtils.isEmpty(record[hash_attribute]) &&
91
+ record[hash_attribute] !== '' &&
92
+ dups.has(hdbUtils.autoCast(record[hash_attribute]))
93
+ ) {
94
+ record.skip = true;
95
+ }
96
+
97
+ dups.add(hdbUtils.autoCast(record[hash_attribute]));
98
+
99
+ for (let attr in record) {
100
+ attributes[attr] = 1;
101
+ }
102
+ });
103
+
104
+ //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
105
+ attributes[hash_attribute] = 1;
106
+
107
+ return {
108
+ schema_table: schemaTable,
109
+ hashes: Array.from(dups),
110
+ attributes: Object.keys(attributes),
111
+ };
112
+ }
113
+
114
+ /** NOTE **
115
+ * Due to circular dependencies between insert.js and schema.js, specifically around createNewAttribute, there
116
+ * is duplicate insertData code in fsCreateAttribute. If you change something here related to insertData, you should
117
+ * do the same in fsCreateAttribute.js
118
+ */
119
+
120
+ /**
121
+ * Inserts data specified in the insertObject parameter.
122
+ * @param insertObject
123
+ */
124
+ async function insertData(insertObject) {
125
+ if (insertObject.operation !== 'insert') {
126
+ throw new Error('invalid operation, must be insert');
127
+ }
128
+
129
+ let validator = insertValidator(insertObject);
130
+ if (validator) {
131
+ throw handleHDBError(new Error(), validator.message, HTTP_STATUS_CODES.BAD_REQUEST);
132
+ }
133
+
134
+ hdbUtils.transformReq(insertObject);
135
+
136
+ let invalidSchemaTableMsg = hdbUtils.checkSchemaTableExist(insertObject.schema, insertObject.table);
137
+ if (invalidSchemaTableMsg) {
138
+ throw handleHDBError(new Error(), invalidSchemaTableMsg, HTTP_STATUS_CODES.BAD_REQUEST);
139
+ }
140
+
141
+ let bridgeInsertResult = await harperBridge.createRecords(insertObject);
142
+
143
+ return returnObject(
144
+ INSERT_ACTION,
145
+ bridgeInsertResult.written_hashes,
146
+ insertObject,
147
+ bridgeInsertResult.skipped_hashes,
148
+ bridgeInsertResult.new_attributes,
149
+ bridgeInsertResult.txn_time
150
+ );
151
+ }
152
+
153
+ /**
154
+ * Updates the data in the updateObject parameter.
155
+ * @param updateObject - The data that will be updated in the database
156
+ */
157
+ async function updateData(updateObject) {
158
+ if (updateObject.operation !== 'update') {
159
+ throw new Error('invalid operation, must be update');
160
+ }
161
+
162
+ let validator = insertValidator(updateObject);
163
+ if (validator) {
164
+ throw handleHDBError(new Error(), validator.message, HTTP_STATUS_CODES.BAD_REQUEST);
165
+ }
166
+
167
+ hdbUtils.transformReq(updateObject);
168
+
169
+ let invalidSchemaTableMsg = hdbUtils.checkSchemaTableExist(updateObject.schema, updateObject.table);
170
+ if (invalidSchemaTableMsg) {
171
+ throw handleHDBError(new Error(), invalidSchemaTableMsg, HTTP_STATUS_CODES.BAD_REQUEST);
172
+ }
173
+
174
+ let bridgeUpdateResult = await harperBridge.updateRecords(updateObject);
175
+ if (!hdbUtils.isEmpty(bridgeUpdateResult.existing_rows)) {
176
+ return returnObject(
177
+ bridgeUpdateResult.update_action,
178
+ [],
179
+ updateObject,
180
+ bridgeUpdateResult.hashes,
181
+ undefined,
182
+ bridgeUpdateResult.txn_time
183
+ );
184
+ }
185
+
186
+ return returnObject(
187
+ UPDATE_ACTION,
188
+ bridgeUpdateResult.written_hashes,
189
+ updateObject,
190
+ bridgeUpdateResult.skipped_hashes,
191
+ bridgeUpdateResult.new_attributes,
192
+ bridgeUpdateResult.txn_time
193
+ );
194
+ }
195
+
196
+ /**
197
+ * Upsert the data in the upsertObject parameter.
198
+ * @param upsertObject - Represents the data that will be upserted in the database
199
+ */
200
+ async function upsertData(upsertObject) {
201
+ if (upsertObject.operation !== 'upsert') {
202
+ throw handleHDBError(new Error(), 'invalid operation, must be upsert', HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR);
203
+ }
204
+
205
+ let validator = insertValidator(upsertObject);
206
+ if (validator) {
207
+ throw handleHDBError(new Error(), validator.message, HTTP_STATUS_CODES.BAD_REQUEST);
208
+ }
209
+
210
+ hdbUtils.transformReq(upsertObject);
211
+
212
+ let invalidSchemaTableMsg = hdbUtils.checkSchemaTableExist(upsertObject.schema, upsertObject.table);
213
+ if (invalidSchemaTableMsg) {
214
+ throw handleHDBError(new Error(), invalidSchemaTableMsg, HTTP_STATUS_CODES.BAD_REQUEST);
215
+ }
216
+
217
+ let bridgeUpsertResult = await harperBridge.upsertRecords(upsertObject);
218
+
219
+ return returnObject(
220
+ UPSERT_ACTION,
221
+ bridgeUpsertResult.written_hashes,
222
+ upsertObject,
223
+ [],
224
+ bridgeUpsertResult.new_attributes,
225
+ bridgeUpsertResult.txn_time
226
+ );
227
+ }
228
+
229
+ /**
230
+ * Constructs return object for insert, update, and upsert.
231
+ * @param action
232
+ * @param written_hashes
233
+ * @param object
234
+ * @param skipped - not included for upsert ops
235
+ * @param new_attributes
236
+ * @param txnTime
237
+ * @returns {{ message: string, new_attributes: *, txn_time: * }}
238
+ */
239
+
240
+ function returnObject(action, written_hashes, object, skipped, new_attributes, txnTime) {
241
+ let return_object = {
242
+ message: `${action} ${written_hashes.length} of ${written_hashes.length + skipped.length} records`,
243
+ new_attributes,
244
+ txn_time: txnTime,
245
+ };
246
+
247
+ if (action === INSERT_ACTION) {
248
+ return_object.inserted_hashes = written_hashes;
249
+ return_object.skipped_hashes = skipped;
250
+ return return_object;
251
+ }
252
+
253
+ if (action === UPSERT_ACTION) {
254
+ return_object.upserted_hashes = written_hashes;
255
+ return return_object;
256
+ }
257
+
258
+ return_object.update_hashes = written_hashes;
259
+ return_object.skipped_hashes = skipped;
260
+ return return_object;
261
+ }
262
+
263
+ function flush(object) {
264
+ hdbUtils.transformReq(object);
265
+ return harperBridge.flush(object.schema, object.table);
266
+ }
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ const harperBridge = require('./harperBridge/harperBridge.js');
4
+ // eslint-disable-next-line no-unused-vars
5
+ const ReadAuditLogObject = require('./ReadAuditLogObject.js');
6
+ const hdbUtils = require('../utility/common_utils.js');
7
+ const hdbTerms = require('../utility/hdbTerms.ts');
8
+ const envMgr = require('../utility/environment/environmentManager.js');
9
+ const { handleHDBError, hdbErrors } = require('../utility/errors/hdbError.js');
10
+ const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
11
+
12
+ const SEARCH_TYPES = Object.values(hdbTerms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM);
13
+ const LOG_NOT_ENABLED_ERR = 'To use this operation audit log must be enabled in harperdb-config.yaml';
14
+
15
+ module.exports = readAuditLog;
16
+
17
+ /**
18
+ *
19
+ * @param {ReadAuditLogObject} readAuditLogObject
20
+ * @returns {Promise<void>}
21
+ */
22
+ async function readAuditLog(readAuditLogObject) {
23
+ if (hdbUtils.isEmpty(readAuditLogObject.schema)) {
24
+ throw new Error(HDB_ERROR_MSGS.SCHEMA_REQUIRED_ERR);
25
+ }
26
+
27
+ if (hdbUtils.isEmpty(readAuditLogObject.table)) {
28
+ throw new Error(HDB_ERROR_MSGS.TABLE_REQUIRED_ERR);
29
+ }
30
+
31
+ if (!envMgr.get(hdbTerms.CONFIG_PARAMS.LOGGING_AUDITLOG)) {
32
+ throw handleHDBError(
33
+ new Error(),
34
+ LOG_NOT_ENABLED_ERR,
35
+ HTTP_STATUS_CODES.BAD_REQUEST,
36
+ hdbTerms.LOG_LEVELS.ERROR,
37
+ LOG_NOT_ENABLED_ERR,
38
+ true
39
+ );
40
+ }
41
+
42
+ const invalidSchemaTableMsg = hdbUtils.checkSchemaTableExist(readAuditLogObject.schema, readAuditLogObject.table);
43
+ if (invalidSchemaTableMsg) {
44
+ throw handleHDBError(
45
+ new Error(),
46
+ invalidSchemaTableMsg,
47
+ HTTP_STATUS_CODES.NOT_FOUND,
48
+ hdbTerms.LOG_LEVELS.ERROR,
49
+ invalidSchemaTableMsg,
50
+ true
51
+ );
52
+ }
53
+
54
+ if (!hdbUtils.isEmpty(readAuditLogObject.search_type) && SEARCH_TYPES.indexOf(readAuditLogObject.search_type) < 0) {
55
+ throw new Error(`Invalid searchType '${readAuditLogObject.search_type}'`);
56
+ }
57
+
58
+ return await harperBridge.readAuditLog(readAuditLogObject);
59
+ }