@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,24 @@
1
+ 'use strict';
2
+ const LMDBTransactionObject = require('./LMDBTransactionObject.js');
3
+ const OPERATIONS_ENUM = require('../../../../utility/hdbTerms.ts').OPERATIONS_ENUM;
4
+
5
+ /**
6
+ * class to define an update transaction
7
+ */
8
+ class LMDBUpdateTransactionObject extends LMDBTransactionObject {
9
+ /**
10
+ * @param {Array.<Object>} records - records updated
11
+ * @param {Array.<Object>} originalRecords - original state of records that were updated
12
+ * @param {string} userName - username that executed the transaction
13
+ * @param {number} timestamp - timestamp of transaction
14
+ * @param {[String|Number]} hash_values
15
+ * @param {any} origin
16
+ */
17
+ constructor(records, originalRecords, userName, timestamp, hash_values, origin = undefined) {
18
+ super(OPERATIONS_ENUM.UPDATE, userName, timestamp, hash_values, origin);
19
+ this.records = records;
20
+ this.original_records = originalRecords;
21
+ }
22
+ }
23
+
24
+ module.exports = LMDBUpdateTransactionObject;
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+ const LMDBTransactionObject = require('./LMDBTransactionObject.js');
3
+ const OPERATIONS_ENUM = require('../../../../utility/hdbTerms.ts').OPERATIONS_ENUM;
4
+
5
+ /**
6
+ * class to define an update transaction
7
+ */
8
+ class LMDBUpsertTransactionObject extends LMDBTransactionObject {
9
+ /**
10
+ * @param {Array.<Object>} records - records updated
11
+ * @param {Array.<Object>} originalRecords - original state of records that were updated
12
+ * @param {string} userName - username that executed the transaction
13
+ * @param {number} timestamp - timestamp of transaction
14
+ * @param {[String|Number]} hash_values
15
+ * @param {any} origin
16
+ */
17
+ constructor(records, originalRecords, userName, timestamp, hash_values, origin = undefined) {
18
+ super(OPERATIONS_ENUM.UPSERT, userName, timestamp, hash_values, origin);
19
+ this.records = records;
20
+ this.original_records = originalRecords;
21
+ }
22
+ }
23
+
24
+ module.exports = LMDBUpsertTransactionObject;
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * represents the table size entry for a table
5
+ */
6
+ class TableSizeObject {
7
+ /**
8
+ * @param {String} schema
9
+ * @param {String} table
10
+ * @param {Number} tableSize - data size of the table in bytes
11
+ * @param {Number} recordCount - number of entries in the table
12
+ * @param {Number} transactionLogSize - number of entries in the transaction log
13
+ * @param {Number} transactionLogRecordCount - data size of the transaction log in bytes
14
+ */
15
+ constructor(schema, table, tableSize = 0, recordCount = 0, transactionLogSize = 0, transactionLogRecordCount = 0) {
16
+ this.schema = schema;
17
+ this.table = table;
18
+ this.table_size = tableSize;
19
+ this.record_count = recordCount;
20
+ this.transaction_log_size = transactionLogSize;
21
+ this.transaction_log_record_count = transactionLogRecordCount;
22
+ }
23
+ }
24
+
25
+ module.exports = TableSizeObject;
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
4
+ const searchValidator = require('../../../../validation/searchValidator.js');
5
+ const { getSchemaPath } = require('./initializePaths.js');
6
+
7
+ module.exports = initialize;
8
+
9
+ /**
10
+ *
11
+ * @param searchObject
12
+ * @returns {*}
13
+ */
14
+ function initialize(searchObject) {
15
+ const validationError = searchValidator(searchObject, 'hashes');
16
+ if (validationError) {
17
+ throw validationError;
18
+ }
19
+ let envBasePath = getSchemaPath(searchObject.schema, searchObject.table);
20
+ return environmentUtility.openEnvironment(envBasePath, searchObject.table);
21
+ }
@@ -0,0 +1,157 @@
1
+ 'use strict';
2
+
3
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
4
+ const hdbUtils = require('../../../../utility/common_utils.js');
5
+ const env = require('../../../../utility/environment/environmentManager.js');
6
+ const path = require('path');
7
+ const minimist = require('minimist');
8
+ const fs = require('fs-extra');
9
+ const _ = require('lodash');
10
+ env.initSync();
11
+
12
+ const { CONFIG_PARAMS, DATABASES_PARAM_CONFIG, SYSTEM_SCHEMA_NAME } = hdbTerms;
13
+ let BASE_SCHEMA_PATH = undefined;
14
+ let SYSTEM_SCHEMA_PATH = undefined;
15
+ let TRANSACTION_STORE_PATH = undefined;
16
+
17
+ /**
18
+ * when HDB is not yet installed we do not yet know the base path and an error is thrown if we do a standard const, so we create a getter
19
+ * @returns {string|*}
20
+ */
21
+ function getBaseSchemaPath() {
22
+ if (BASE_SCHEMA_PATH !== undefined) {
23
+ return BASE_SCHEMA_PATH;
24
+ }
25
+
26
+ if (env.getHdbBasePath() !== undefined) {
27
+ BASE_SCHEMA_PATH =
28
+ env.get(CONFIG_PARAMS.STORAGE_PATH) || path.join(env.getHdbBasePath(), hdbTerms.DATABASES_DIR_NAME);
29
+ return BASE_SCHEMA_PATH;
30
+ }
31
+ }
32
+
33
+ /**
34
+ * when HDB is not yet installed we do not yet know the base path and an error is thrown if we do a standard const, so we create a getter
35
+ * @returns {string|*}
36
+ */
37
+ function getSystemSchemaPath() {
38
+ if (SYSTEM_SCHEMA_PATH !== undefined) {
39
+ return SYSTEM_SCHEMA_PATH;
40
+ }
41
+
42
+ if (env.getHdbBasePath() !== undefined) {
43
+ SYSTEM_SCHEMA_PATH = getSchemaPath(SYSTEM_SCHEMA_NAME);
44
+ return SYSTEM_SCHEMA_PATH;
45
+ }
46
+ }
47
+
48
+ function getTransactionAuditStoreBasePath() {
49
+ if (TRANSACTION_STORE_PATH !== undefined) {
50
+ return TRANSACTION_STORE_PATH;
51
+ }
52
+
53
+ if (env.getHdbBasePath() !== undefined) {
54
+ TRANSACTION_STORE_PATH =
55
+ env.get(hdbTerms.CONFIG_PARAMS.STORAGE_AUDIT_PATH) ||
56
+ path.join(env.getHdbBasePath(), hdbTerms.TRANSACTIONS_DIR_NAME);
57
+ return TRANSACTION_STORE_PATH;
58
+ }
59
+ }
60
+
61
+ function getTransactionAuditStorePath(schema, table) {
62
+ let schemaConfig = env.get(CONFIG_PARAMS.DATABASES)?.[schema];
63
+ return (
64
+ (table && schemaConfig?.tables?.[table]?.auditPath) ||
65
+ schemaConfig?.auditPath ||
66
+ path.join(getTransactionAuditStoreBasePath(), schema.toString())
67
+ );
68
+ }
69
+
70
+ function getSchemaPath(schema, table) {
71
+ schema = schema.toString();
72
+ table = table ? table.toString() : table;
73
+ let schemaConfig = env.get(hdbTerms.CONFIG_PARAMS.DATABASES)?.[schema];
74
+ return (table && schemaConfig?.tables?.[table]?.path) || schemaConfig?.path || path.join(getBaseSchemaPath(), schema);
75
+ }
76
+
77
+ /**
78
+ * It is possible to set where the system schema/table files reside. This function will check for CLI/env vars
79
+ * on install and update accordingly.
80
+ * @param schema
81
+ * @param table
82
+ * @returns {string|string|*}
83
+ */
84
+ function initSystemSchemaPaths(schema, table) {
85
+ schema = schema.toString();
86
+ table = table.toString();
87
+
88
+ // Check to see if there are any CLI or env args related to schema/table path
89
+ const args = process.env;
90
+ Object.assign(args, minimist(process.argv));
91
+
92
+ const schemaConfJson = args[CONFIG_PARAMS.DATABASES.toUpperCase()];
93
+ if (schemaConfJson) {
94
+ let schemasConf;
95
+ try {
96
+ schemasConf = JSON.parse(schemaConfJson);
97
+ } catch (err) {
98
+ if (!hdbUtils.isObject(schemaConfJson)) throw err;
99
+ schemasConf = schemaConfJson;
100
+ }
101
+
102
+ for (const schemaConf of schemasConf) {
103
+ const systemSchemaConf = schemaConf[SYSTEM_SCHEMA_NAME];
104
+ if (!systemSchemaConf) continue;
105
+ let schemasObj = env.get(CONFIG_PARAMS.DATABASES);
106
+ schemasObj = schemasObj ?? {};
107
+
108
+ // If path var exists for system table add it to schemas prop and return path.
109
+ const systemTablePath = systemSchemaConf?.tables?.[table]?.[DATABASES_PARAM_CONFIG.PATH];
110
+ if (systemTablePath) {
111
+ _.set(
112
+ schemasObj,
113
+ [SYSTEM_SCHEMA_NAME, DATABASES_PARAM_CONFIG.TABLES, table, DATABASES_PARAM_CONFIG.PATH],
114
+ systemTablePath
115
+ );
116
+ env.setProperty(CONFIG_PARAMS.DATABASES, schemasObj);
117
+ return systemTablePath;
118
+ }
119
+
120
+ // If path exists for system schema add it to schemas prop and return path.
121
+ const systemSchemaPath = systemSchemaConf?.[DATABASES_PARAM_CONFIG.PATH];
122
+ if (systemSchemaPath) {
123
+ _.set(schemasObj, [SYSTEM_SCHEMA_NAME, DATABASES_PARAM_CONFIG.PATH], systemSchemaPath);
124
+ env.setProperty(CONFIG_PARAMS.DATABASES, schemasObj);
125
+ return systemSchemaPath;
126
+ }
127
+ }
128
+ }
129
+
130
+ // If storagePath is passed use that to determine location
131
+ const storagePath = args[CONFIG_PARAMS.STORAGE_PATH.toUpperCase()];
132
+ if (storagePath) {
133
+ if (!fs.pathExistsSync(storagePath)) throw new Error(storagePath + ' does not exist');
134
+ const storageSchemaPath = path.join(storagePath, schema);
135
+ fs.mkdirsSync(storageSchemaPath);
136
+ env.setProperty(CONFIG_PARAMS.STORAGE_PATH, storagePath);
137
+
138
+ return storageSchemaPath;
139
+ }
140
+
141
+ // Default to default location
142
+ return getSystemSchemaPath();
143
+ }
144
+ function resetPaths() {
145
+ BASE_SCHEMA_PATH = undefined;
146
+ SYSTEM_SCHEMA_PATH = undefined;
147
+ TRANSACTION_STORE_PATH = undefined;
148
+ }
149
+ module.exports = {
150
+ getBaseSchemaPath,
151
+ getSystemSchemaPath,
152
+ getTransactionAuditStorePath,
153
+ getTransactionAuditStoreBasePath,
154
+ getSchemaPath,
155
+ initSystemSchemaPaths,
156
+ resetPaths,
157
+ };
@@ -0,0 +1,94 @@
1
+ 'use strict';
2
+
3
+ const hUtils = require('../../../../utility/common_utils.js');
4
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
5
+ const logger = require('../../../../utility/logging/harper_logger.js');
6
+ const lmdbCreateAttribute = require('../lmdbMethods/lmdbCreateAttribute.js');
7
+ const LMDBCreateAttributeObject = require('./LMDBCreateAttributeObject.js');
8
+ const signalling = require('../../../../utility/signalling.js');
9
+ const { SchemaEventMsg } = require('../../../../server/threads/itc.js');
10
+
11
+ const ATTRIBUTE_ALREADY_EXISTS = 'already exists in';
12
+
13
+ module.exports = lmdbCheckForNewAttributes;
14
+
15
+ /**
16
+ * Uses a utility function to check if there are any new attributes that dont exist. Utility function
17
+ * references the global schema.
18
+ * @param hdbAuthHeader
19
+ * @param tableSchema
20
+ * @param dataAttributes
21
+ */
22
+ async function lmdbCheckForNewAttributes(hdbAuthHeader, tableSchema, dataAttributes) {
23
+ if (hUtils.isEmptyOrZeroLength(dataAttributes)) {
24
+ return dataAttributes;
25
+ }
26
+
27
+ let rawAttributes = [];
28
+ if (!hUtils.isEmptyOrZeroLength(tableSchema.attributes)) {
29
+ tableSchema.attributes.forEach((attribute) => {
30
+ rawAttributes.push(attribute.attribute);
31
+ });
32
+ }
33
+
34
+ let new_attributes = dataAttributes.filter((attribute) => rawAttributes.indexOf(attribute) < 0);
35
+
36
+ if (new_attributes.length === 0) {
37
+ return new_attributes;
38
+ }
39
+
40
+ await Promise.all(
41
+ new_attributes.map(async (attribute) => {
42
+ await createNewAttribute(hdbAuthHeader, tableSchema.schema, tableSchema.name, attribute);
43
+ })
44
+ );
45
+
46
+ return new_attributes;
47
+ }
48
+
49
+ /**
50
+ * check the existing schema and creates new attributes based on what the incoming records have
51
+ * @param hdbAuthHeader
52
+ * @param schema
53
+ * @param table
54
+ * @param attribute
55
+ */
56
+ async function createNewAttribute(hdbAuthHeader, schema, table, attribute) {
57
+ let attributeObject = new LMDBCreateAttributeObject(schema, table, attribute, undefined, true);
58
+
59
+ if (hdbAuthHeader) {
60
+ attributeObject.hdb_auth_header = hdbAuthHeader;
61
+ }
62
+
63
+ try {
64
+ await createAttribute(attributeObject);
65
+ } catch (e) {
66
+ //if the attribute already exists we do not want to stop the insert
67
+ if (typeof e === 'object' && e.message !== undefined && e.message.includes(ATTRIBUTE_ALREADY_EXISTS)) {
68
+ logger.warn(`attribute ${schema}.${table}.${attribute} already exists`);
69
+ } else {
70
+ throw e;
71
+ }
72
+ }
73
+ }
74
+
75
+ /**
76
+ *
77
+ * @param {LMDBCreateAttributeObject} createAttributeObject
78
+ * @returns {Promise<*>}
79
+ */
80
+ async function createAttribute(createAttributeObject) {
81
+ let attributeStructure;
82
+ attributeStructure = await lmdbCreateAttribute(createAttributeObject);
83
+ signalling.signalSchemaChange(
84
+ new SchemaEventMsg(
85
+ process.pid,
86
+ hdbTerms.OPERATIONS_ENUM.CREATE_ATTRIBUTE,
87
+ createAttributeObject.schema,
88
+ createAttributeObject.table,
89
+ createAttributeObject.attribute
90
+ )
91
+ );
92
+
93
+ return attributeStructure;
94
+ }
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs-extra');
4
+ const environmentUtility = require('../../../../utility/lmdb/environmentUtility.js');
5
+ const { getTransactionAuditStorePath } = require('../lmdbUtility/initializePaths.js');
6
+ const lmdbTerms = require('../../../../utility/lmdb/terms.js');
7
+ // eslint-disable-next-line no-unused-vars
8
+ const CreateTableObject = require('../../../CreateTableObject.js');
9
+
10
+ module.exports = createTransactionsAuditEnvironment;
11
+
12
+ /**
13
+ * Creates the environment to hold transactions
14
+ * @param {CreateTableObject} tableCreateObj
15
+ * @returns {Promise<lmdb.RootDatabase>}
16
+ */
17
+ async function createTransactionsAuditEnvironment(tableCreateObj) {
18
+ let env;
19
+ try {
20
+ //create transactions environment for table
21
+ let transactionPath = getTransactionAuditStorePath(tableCreateObj.schema, tableCreateObj.table);
22
+ await fs.mkdirp(transactionPath);
23
+ env = await environmentUtility.createEnvironment(transactionPath, tableCreateObj.table, true);
24
+ } catch (e) {
25
+ e.message = `unable to create transactions audit environment for ${tableCreateObj.schema}.${tableCreateObj.table} due to: ${e.message}`;
26
+ throw e;
27
+ }
28
+
29
+ try {
30
+ //create dbis for transactions environment
31
+ environmentUtility.createDBI(env, lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP, false, true);
32
+ environmentUtility.createDBI(env, lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE, true, false);
33
+ environmentUtility.createDBI(env, lmdbTerms.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME, true, false);
34
+ } catch (e) {
35
+ e.message = `unable to create dbi for ${tableCreateObj.schema}.${tableCreateObj.table} due to: ${e.message}`;
36
+ throw e;
37
+ }
38
+ return env;
39
+ }
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ const TableSizeObject = require('./TableSizeObject.js');
4
+ const log = require('../../../../utility/logging/harper_logger.js');
5
+ const { getDatabases } = require('../../../../resources/databases.ts');
6
+
7
+ module.exports = lmdbGetTableSize;
8
+
9
+ /**
10
+ * calculates the number of entries & data size in bytes for a table & its transaction log
11
+ * @param tableObject
12
+ * @returns {Promise<TableSizeObject>}
13
+ */
14
+ async function lmdbGetTableSize(tableObject) {
15
+ let tableStats = new TableSizeObject();
16
+ try {
17
+ //get the table record count
18
+ let table = getDatabases()[tableObject.schema]?.[tableObject.name];
19
+
20
+ let dbiStat = table.primaryStore.getStats();
21
+
22
+ //get the txn log record count
23
+ let txnDbiStat = table.auditStore?.getStats();
24
+
25
+ tableStats.schema = tableObject.schema;
26
+ tableStats.table = tableObject.name;
27
+ tableStats.record_count = dbiStat.entryCount;
28
+ tableStats.transaction_log_record_count = txnDbiStat.entryCount;
29
+ } catch (e) {
30
+ log.warn(`unable to stat table dbi due to ${e}`);
31
+ }
32
+
33
+ return tableStats;
34
+ }
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ // eslint-disable-next-line no-unused-vars
4
+ const InsertObject = require('../../../InsertObject.js');
5
+ const hdbTerms = require('../../../../utility/hdbTerms.ts');
6
+ const hdbUtils = require('../../../../utility/common_utils.js');
7
+ const log = require('../../../../utility/logging/harper_logger.js');
8
+ const uuid = require('uuid');
9
+ const { handleHDBError, hdbErrors } = require('../../../../utility/errors/hdbError.js');
10
+ const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
11
+
12
+ module.exports = processRows;
13
+
14
+ /**
15
+ * parses the records and validates the hash value for each row as well as adding updated/created time stamps
16
+ * @param {InsertObject} insertObj
17
+ * @param {Array.<String>} attributes
18
+ * @param {String} hash_attribute
19
+ */
20
+ function processRows(insertObj, attributes, hash_attribute) {
21
+ for (let x = 0; x < attributes.length; x++) {
22
+ validateAttribute(attributes[x]);
23
+ }
24
+
25
+ let { records } = insertObj;
26
+
27
+ // Iterates through array of record objects and validates their hash
28
+ for (let x = 0; x < records.length; x++) {
29
+ let record = records[x];
30
+ validateHash(record, hash_attribute, insertObj.operation);
31
+ }
32
+ }
33
+ processRows.validateAttribute = validateAttribute;
34
+
35
+ /**
36
+ * Validates that attribute is under max size and is not null, undefined or empty.
37
+ * @param attribute
38
+ */
39
+ function validateAttribute(attribute) {
40
+ if (Buffer.byteLength(String(attribute)) > hdbTerms.INSERT_MAX_CHARACTER_SIZE) {
41
+ throw handleHDBError(
42
+ new Error(),
43
+ HDB_ERROR_MSGS.ATTR_NAME_LENGTH_ERR(attribute),
44
+ HTTP_STATUS_CODES.BAD_REQUEST,
45
+ undefined,
46
+ undefined,
47
+ true
48
+ );
49
+ }
50
+
51
+ if (hdbUtils.isEmptyOrZeroLength(attribute) || hdbUtils.isEmpty(attribute.trim())) {
52
+ throw handleHDBError(
53
+ new Error(),
54
+ HDB_ERROR_MSGS.ATTR_NAME_NULLISH_ERR,
55
+ HTTP_STATUS_CODES.BAD_REQUEST,
56
+ undefined,
57
+ undefined,
58
+ true
59
+ );
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Validates hash value exists and under max char size. If the operation is 'insert' and the hash doesn't exist it
65
+ * will create one.
66
+ * @param record
67
+ * @param hash_attribute
68
+ * @param operation
69
+ */
70
+ function validateHash(record, hash_attribute, operation) {
71
+ if (!record.hasOwnProperty(hash_attribute) || hdbUtils.isEmptyOrZeroLength(record[hash_attribute])) {
72
+ if (operation === hdbTerms.OPERATIONS_ENUM.INSERT || operation === hdbTerms.OPERATIONS_ENUM.UPSERT) {
73
+ record[hash_attribute] = uuid.v4();
74
+ //return here since the rest of the validations do not apply
75
+ return;
76
+ }
77
+
78
+ log.error('Update transaction aborted due to record with no hash value:', record);
79
+ throw handleHDBError(
80
+ new Error(),
81
+ HDB_ERROR_MSGS.RECORD_MISSING_HASH_ERR,
82
+ HTTP_STATUS_CODES.BAD_REQUEST,
83
+ undefined,
84
+ undefined,
85
+ true
86
+ );
87
+ }
88
+
89
+ if (Buffer.byteLength(String(record[hash_attribute])) > hdbTerms.INSERT_MAX_CHARACTER_SIZE) {
90
+ log.error(record);
91
+ throw handleHDBError(
92
+ new Error(),
93
+ HDB_ERROR_MSGS.HASH_VAL_LENGTH_ERR,
94
+ HTTP_STATUS_CODES.BAD_REQUEST,
95
+ undefined,
96
+ undefined,
97
+ true
98
+ );
99
+ }
100
+ }