@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.3

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 (446) 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/{resources/ResourceInterfaceV2.js → components/Logger.js} +1 -1
  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 +17 -10
  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/ResourceInterface.d.ts +1 -1
  145. package/dist/resources/RocksIndexStore.d.ts +3 -3
  146. package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
  147. package/dist/resources/Table.d.ts +15 -6
  148. package/dist/resources/Table.js +12 -4
  149. package/dist/resources/Table.js.map +1 -1
  150. package/dist/resources/analytics/read.js +32 -22
  151. package/dist/resources/analytics/read.js.map +1 -1
  152. package/dist/resources/analytics/write.js +3 -6
  153. package/dist/resources/analytics/write.js.map +1 -1
  154. package/dist/resources/auditStore.d.ts +3 -3
  155. package/dist/resources/blob.d.ts +25 -2
  156. package/dist/resources/databases.d.ts +12 -2
  157. package/dist/resources/databases.js +22 -19
  158. package/dist/resources/databases.js.map +1 -1
  159. package/dist/resources/search.js +11 -5
  160. package/dist/resources/search.js.map +1 -1
  161. package/dist/resources/transaction.d.ts +2 -1
  162. package/dist/security/auth.js +1 -1
  163. package/dist/security/auth.js.map +1 -1
  164. package/dist/security/cryptoHash.d.ts +2 -2
  165. package/dist/security/jsLoader.js +265 -73
  166. package/dist/security/jsLoader.js.map +1 -1
  167. package/dist/security/keys.js +11 -12
  168. package/dist/security/keys.js.map +1 -1
  169. package/dist/security/user.js +3 -3
  170. package/dist/security/user.js.map +1 -1
  171. package/dist/server/REST.js +16 -2
  172. package/dist/server/REST.js.map +1 -1
  173. package/dist/server/Server.d.ts +2 -1
  174. package/dist/server/Server.js.map +1 -1
  175. package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
  176. package/dist/server/fastifyRoutes.js +2 -0
  177. package/dist/server/fastifyRoutes.js.map +1 -1
  178. package/dist/server/http.js +12 -6
  179. package/dist/server/http.js.map +1 -1
  180. package/dist/server/jobs/JobObject.d.ts +3 -3
  181. package/dist/server/loadRootComponents.js +1 -0
  182. package/dist/server/loadRootComponents.js.map +1 -1
  183. package/dist/server/operationsServer.js +3 -1
  184. package/dist/server/operationsServer.js.map +1 -1
  185. package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
  186. package/dist/server/serverHelpers/Request.d.ts +5 -5
  187. package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
  188. package/dist/server/threads/manageThreads.d.ts +2 -2
  189. package/dist/server/threads/manageThreads.js +52 -35
  190. package/dist/server/threads/manageThreads.js.map +1 -1
  191. package/dist/server/threads/socketRouter.d.ts +1 -1
  192. package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
  193. package/dist/utility/AWS/AWSConnector.d.ts +3 -2
  194. package/dist/utility/common_utils.d.ts +3 -3
  195. package/dist/utility/environment/systemInformation.d.ts +1 -0
  196. package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
  197. package/dist/utility/globalSchema.d.ts +1 -1
  198. package/dist/utility/hdbTerms.d.ts +3 -0
  199. package/dist/utility/hdbTerms.js +3 -0
  200. package/dist/utility/hdbTerms.js.map +1 -1
  201. package/dist/utility/installation.d.ts +2 -4
  202. package/dist/utility/installation.js.map +1 -1
  203. package/dist/utility/lmdb/commonUtility.d.ts +2 -1
  204. package/dist/utility/lmdb/commonUtility.js +20 -13
  205. package/dist/utility/lmdb/commonUtility.js.map +1 -1
  206. package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
  207. package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
  208. package/dist/utility/lmdb/searchUtility.d.ts +2 -1
  209. package/dist/utility/lmdb/writeUtility.d.ts +1 -0
  210. package/dist/utility/logging/harper_logger.d.ts +6 -6
  211. package/dist/utility/processManagement/processManagement.d.ts +1 -1
  212. package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
  213. package/dist/validation/common_validators.d.ts +4 -3
  214. package/dist/validation/configValidator.d.ts +3 -2
  215. package/index.d.ts +56 -0
  216. package/index.js +41 -0
  217. package/json/systemSchema.json +373 -0
  218. package/launchServiceScripts/launchHarperDB.js +3 -0
  219. package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
  220. package/package.json +35 -16
  221. package/resources/DatabaseTransaction.ts +378 -0
  222. package/resources/ErrorResource.ts +57 -0
  223. package/resources/IterableEventQueue.ts +94 -0
  224. package/resources/LMDBTransaction.ts +349 -0
  225. package/resources/RecordEncoder.ts +702 -0
  226. package/resources/RequestTarget.ts +134 -0
  227. package/resources/Resource.ts +789 -0
  228. package/resources/ResourceInterface.ts +221 -0
  229. package/resources/Resources.ts +162 -0
  230. package/resources/RocksIndexStore.ts +70 -0
  231. package/resources/RocksTransactionLogStore.ts +352 -0
  232. package/resources/Table.ts +4531 -0
  233. package/resources/analytics/hostnames.ts +72 -0
  234. package/resources/analytics/metadata.ts +10 -0
  235. package/resources/analytics/read.ts +252 -0
  236. package/resources/analytics/write.ts +803 -0
  237. package/resources/auditStore.ts +556 -0
  238. package/resources/blob.ts +1268 -0
  239. package/resources/crdt.ts +125 -0
  240. package/resources/dataLoader.ts +527 -0
  241. package/resources/databases.ts +1290 -0
  242. package/resources/graphql.ts +221 -0
  243. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
  244. package/resources/indexes/customIndexes.ts +7 -0
  245. package/resources/indexes/vector.ts +38 -0
  246. package/resources/jsResource.ts +86 -0
  247. package/resources/loadEnv.ts +22 -0
  248. package/resources/login.ts +18 -0
  249. package/resources/openApi.ts +409 -0
  250. package/resources/registrationDeprecated.ts +8 -0
  251. package/resources/replayLogs.ts +136 -0
  252. package/resources/roles.ts +98 -0
  253. package/resources/search.ts +1301 -0
  254. package/resources/tracked.ts +584 -0
  255. package/resources/transaction.ts +89 -0
  256. package/resources/transactionBroadcast.ts +258 -0
  257. package/security/auth.ts +376 -0
  258. package/security/certificateVerification/certificateVerificationSource.ts +84 -0
  259. package/security/certificateVerification/configValidation.ts +107 -0
  260. package/security/certificateVerification/crlVerification.ts +623 -0
  261. package/security/certificateVerification/index.ts +121 -0
  262. package/security/certificateVerification/ocspVerification.ts +148 -0
  263. package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
  264. package/security/certificateVerification/types.ts +128 -0
  265. package/security/certificateVerification/verificationConfig.ts +138 -0
  266. package/security/certificateVerification/verificationUtils.ts +447 -0
  267. package/security/cryptoHash.js +42 -0
  268. package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
  269. package/security/data_objects/PermissionResponseObject.js +115 -0
  270. package/security/data_objects/PermissionTableResponseObject.js +20 -0
  271. package/security/fastifyAuth.js +169 -0
  272. package/security/impersonation.ts +160 -0
  273. package/security/jsLoader.ts +733 -0
  274. package/security/keys.js +948 -0
  275. package/security/permissionsTranslator.js +300 -0
  276. package/security/role.js +218 -0
  277. package/security/tokenAuthentication.ts +228 -0
  278. package/security/user.ts +449 -0
  279. package/server/DurableSubscriptionsSession.ts +503 -0
  280. package/server/REST.ts +407 -0
  281. package/server/Server.ts +89 -0
  282. package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
  283. package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
  284. package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
  285. package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
  286. package/server/fastifyRoutes.ts +205 -0
  287. package/server/graphqlQuerying.ts +700 -0
  288. package/server/http.ts +640 -0
  289. package/server/itc/serverHandlers.js +161 -0
  290. package/server/itc/utility/ITCEventObject.js +10 -0
  291. package/server/jobs/JobObject.js +24 -0
  292. package/server/jobs/jobProcess.js +69 -0
  293. package/server/jobs/jobRunner.js +162 -0
  294. package/server/jobs/jobs.js +304 -0
  295. package/server/loadRootComponents.js +44 -0
  296. package/server/mqtt.ts +485 -0
  297. package/server/nodeName.ts +75 -0
  298. package/server/operationsServer.ts +313 -0
  299. package/server/serverHelpers/Headers.ts +108 -0
  300. package/server/serverHelpers/JSONStream.ts +269 -0
  301. package/server/serverHelpers/OperationFunctionObject.ts +13 -0
  302. package/server/serverHelpers/Request.ts +158 -0
  303. package/server/serverHelpers/contentTypes.ts +637 -0
  304. package/server/serverHelpers/requestTimePlugin.js +57 -0
  305. package/server/serverHelpers/serverHandlers.js +148 -0
  306. package/server/serverHelpers/serverUtilities.ts +473 -0
  307. package/server/serverRegistry.ts +8 -0
  308. package/server/static.ts +187 -0
  309. package/server/status/definitions.ts +37 -0
  310. package/server/status/index.ts +125 -0
  311. package/server/storageReclamation.ts +93 -0
  312. package/server/threads/itc.js +89 -0
  313. package/server/threads/manageThreads.js +596 -0
  314. package/server/threads/socketRouter.ts +360 -0
  315. package/server/threads/threadServer.js +279 -0
  316. package/server/throttle.ts +73 -0
  317. package/sqlTranslator/SelectValidator.js +330 -0
  318. package/sqlTranslator/alasqlFunctionImporter.js +62 -0
  319. package/sqlTranslator/deleteTranslator.js +67 -0
  320. package/sqlTranslator/index.js +242 -0
  321. package/sqlTranslator/sql_statement_bucket.js +472 -0
  322. package/static/defaultConfig.yaml +3 -0
  323. package/studio/web/HDBDogOnly.svg +78 -0
  324. package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
  325. package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
  326. package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
  327. package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
  328. package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
  329. package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
  330. package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
  331. package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
  332. package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
  333. package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
  334. package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
  335. package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
  336. package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
  337. package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
  338. package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
  339. package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
  340. package/studio/web/assets/index-C1G-Jo6n.js +37 -0
  341. package/studio/web/assets/index-C1G-Jo6n.js.map +1 -0
  342. package/studio/web/assets/index-D-CahN0-.js +2 -0
  343. package/studio/web/assets/index-D-CahN0-.js.map +1 -0
  344. package/studio/web/assets/index-DxlZI0PX.js +235 -0
  345. package/studio/web/assets/index-DxlZI0PX.js.map +1 -0
  346. package/studio/web/assets/index-Y2g_iFpU.css +1 -0
  347. package/studio/web/assets/index-jiPwkrsB.css +1 -0
  348. package/studio/web/assets/index.lazy-BUXDDqq9.js +266 -0
  349. package/studio/web/assets/index.lazy-BUXDDqq9.js.map +1 -0
  350. package/studio/web/assets/profiler-CU93QiSW.js +2 -0
  351. package/studio/web/assets/profiler-CU93QiSW.js.map +1 -0
  352. package/studio/web/assets/react-redux-B8k9Ep7e.js +6 -0
  353. package/studio/web/assets/react-redux-B8k9Ep7e.js.map +1 -0
  354. package/studio/web/assets/startRecording-DFeBXGk6.js +3 -0
  355. package/studio/web/assets/startRecording-DFeBXGk6.js.map +1 -0
  356. package/studio/web/fabric-signup-background.webp +0 -0
  357. package/studio/web/fabric-signup-text.png +0 -0
  358. package/studio/web/favicon_purple.png +0 -0
  359. package/studio/web/github-icon.svg +15 -0
  360. package/studio/web/harper-fabric_black.png +0 -0
  361. package/studio/web/harper-fabric_white.png +0 -0
  362. package/studio/web/harper-studio_white.png +0 -0
  363. package/studio/web/index.html +16 -0
  364. package/studio/web/running.css +148 -0
  365. package/studio/web/running.html +147 -0
  366. package/studio/web/running.js +111 -0
  367. package/upgrade/UpgradeObjects.js +13 -0
  368. package/upgrade/directives/directivesController.js +90 -0
  369. package/upgrade/directivesManager.js +139 -0
  370. package/upgrade/upgradePrompt.js +124 -0
  371. package/upgrade/upgradeUtilities.js +28 -0
  372. package/utility/AWS/AWSConnector.js +29 -0
  373. package/utility/OperationFunctionCaller.js +63 -0
  374. package/utility/assignCmdEnvVariables.js +62 -0
  375. package/utility/common_utils.js +867 -0
  376. package/utility/environment/environmentManager.js +208 -0
  377. package/utility/environment/systemInformation.js +355 -0
  378. package/utility/errors/commonErrors.js +267 -0
  379. package/utility/errors/hdbError.js +146 -0
  380. package/utility/functions/date/dateFunctions.js +65 -0
  381. package/utility/functions/geo.js +355 -0
  382. package/utility/functions/sql/alaSQLExtension.js +104 -0
  383. package/utility/globalSchema.js +35 -0
  384. package/utility/hdbTerms.ts +819 -0
  385. package/utility/install/checkJWTTokensExist.js +62 -0
  386. package/utility/install/harperdb.conf +15 -0
  387. package/utility/install/harperdb.service +14 -0
  388. package/utility/install/installer.js +635 -0
  389. package/utility/installation.ts +30 -0
  390. package/utility/lmdb/DBIDefinition.js +20 -0
  391. package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
  392. package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
  393. package/utility/lmdb/OpenDBIObject.js +31 -0
  394. package/utility/lmdb/OpenEnvironmentObject.js +41 -0
  395. package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
  396. package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
  397. package/utility/lmdb/cleanLMDBMap.js +65 -0
  398. package/utility/lmdb/commonUtility.js +130 -0
  399. package/utility/lmdb/deleteUtility.js +128 -0
  400. package/utility/lmdb/environmentUtility.js +477 -0
  401. package/utility/lmdb/searchCursorFunctions.js +187 -0
  402. package/utility/lmdb/searchUtility.js +918 -0
  403. package/utility/lmdb/terms.js +57 -0
  404. package/utility/lmdb/writeUtility.js +407 -0
  405. package/utility/logging/harper_logger.js +876 -0
  406. package/utility/logging/logRotator.js +157 -0
  407. package/utility/logging/logger.ts +24 -0
  408. package/utility/logging/readLog.js +355 -0
  409. package/utility/logging/transactionLog.js +57 -0
  410. package/utility/mount_hdb.js +59 -0
  411. package/utility/npmUtilities.js +102 -0
  412. package/utility/operationPermissions.ts +112 -0
  413. package/utility/operation_authorization.js +836 -0
  414. package/utility/packageUtils.js +55 -0
  415. package/utility/password.ts +99 -0
  416. package/utility/processManagement/processManagement.js +187 -0
  417. package/utility/processManagement/servicesConfig.js +56 -0
  418. package/utility/scripts/restartHdb.js +24 -0
  419. package/utility/scripts/user_data.sh +13 -0
  420. package/utility/signalling.js +36 -0
  421. package/utility/terms/certificates.js +81 -0
  422. package/utility/when.ts +20 -0
  423. package/validation/bulkDeleteValidator.js +24 -0
  424. package/validation/check_permissions.js +19 -0
  425. package/validation/common_validators.js +95 -0
  426. package/validation/configValidator.js +331 -0
  427. package/validation/deleteValidator.js +15 -0
  428. package/validation/fileLoadValidator.js +153 -0
  429. package/validation/insertValidator.js +40 -0
  430. package/validation/installValidator.js +37 -0
  431. package/validation/readLogValidator.js +64 -0
  432. package/validation/role_validation.js +320 -0
  433. package/validation/schemaMetadataValidator.js +42 -0
  434. package/validation/searchValidator.js +166 -0
  435. package/validation/statusValidator.ts +66 -0
  436. package/validation/transactionLogValidator.js +33 -0
  437. package/validation/user_validation.js +55 -0
  438. package/validation/validationWrapper.js +105 -0
  439. package/dist/resources/ResourceInterfaceV2.d.ts +0 -21
  440. package/dist/resources/ResourceInterfaceV2.js.map +0 -1
  441. package/dist/resources/ResourceV2.d.ts +0 -30
  442. package/dist/resources/ResourceV2.js +0 -27
  443. package/dist/resources/ResourceV2.js.map +0 -1
  444. package/dist/resources/analytics/profile.d.ts +0 -2
  445. package/dist/resources/analytics/profile.js +0 -144
  446. package/dist/resources/analytics/profile.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ const INTERNAL_DBIS_NAME = '__dbis__';
4
+ const AUDIT_STORE_NAME = '__txns__';
5
+ const ENVIRONMENT_NAME_KEY = '__environment_name__';
6
+ const DBI_DEFINITION_NAME = '__dbi_defintion__';
7
+ //LMDB has a 1978 byte limit for keys, but we try to retain plenty of padding so we don't have to calculate encoded byte length
8
+ const MAX_SEARCH_KEY_LENGTH = 256;
9
+
10
+ const SEARCH_TYPES = {
11
+ EQUALS: 'equals',
12
+ STARTS_WITH: 'startsWith',
13
+ _STARTS_WITH: 'starts_with',
14
+ ENDS_WITH: 'endsWith',
15
+ _ENDS_WITH: 'ends_with',
16
+ CONTAINS: 'contains',
17
+ SEARCH_ALL: 'searchAll',
18
+ SEARCH_ALL_TO_MAP: 'searchAllToMap',
19
+ BATCH_SEARCH_BY_HASH: 'batchSearchByHash',
20
+ BATCH_SEARCH_BY_HASH_TO_MAP: 'batchSearchByHashToMap',
21
+ GREATER_THAN: 'greaterThan',
22
+ _GREATER_THAN: 'greater_than',
23
+ GREATER_THAN_EQUAL: 'greaterThanEqual',
24
+ _GREATER_THAN_EQUAL: 'greater_than_equal',
25
+ LESS_THAN: 'lessThan',
26
+ _LESS_THAN: 'less_than',
27
+ LESS_THAN_EQUAL: 'lessThanEqual',
28
+ _LESS_THAN_EQUAL: 'less_than_equal',
29
+ BETWEEN: 'between',
30
+ };
31
+
32
+ const TIMESTAMP_NAMES = ['__createdtime__', '__updatedtime__'];
33
+ // This is appended to the end of keys that are larger than the max key size, as a marker to indicate
34
+ // the full value must be retrieved from the full record (from the hash/primary dbi) for operations
35
+ // that require the full value (contains and ends-with operators).
36
+ const OVERFLOW_MARKER = '\uffff';
37
+
38
+ const TRANSACTIONS_DBI_NAMES_ENUM = {
39
+ TIMESTAMP: 'timestamp',
40
+ HASH_VALUE: 'hash_value',
41
+ USER_NAME: 'user_name',
42
+ };
43
+
44
+ const TRANSACTIONS_DBIS = Object.values(TRANSACTIONS_DBI_NAMES_ENUM);
45
+
46
+ module.exports = {
47
+ AUDIT_STORE_NAME,
48
+ INTERNAL_DBIS_NAME,
49
+ DBI_DEFINITION_NAME,
50
+ SEARCH_TYPES,
51
+ TIMESTAMP_NAMES,
52
+ MAX_SEARCH_KEY_LENGTH,
53
+ ENVIRONMENT_NAME_KEY,
54
+ TRANSACTIONS_DBI_NAMES_ENUM,
55
+ TRANSACTIONS_DBIS,
56
+ OVERFLOW_MARKER,
57
+ };
@@ -0,0 +1,407 @@
1
+ 'use strict';
2
+
3
+ const environmentUtil = require('./environmentUtility.js');
4
+ const InsertRecordsResponseObject = require('./InsertRecordsResponseObject.js');
5
+ const UpdateRecordsResponseObject = require('./UpdateRecordsResponseObject.js');
6
+ const UpsertRecordsResponseObject = require('./UpsertRecordsResponseObject.js');
7
+ const common = require('./commonUtility.js');
8
+ const LMDB_ERRORS = require('../errors/commonErrors.js').LMDB_ERRORS_ENUM;
9
+ const hdbTerms = require('../hdbTerms.ts');
10
+ const hdbUtils = require('../common_utils.js');
11
+ const uuid = require('uuid');
12
+ // eslint-disable-next-line no-unused-vars
13
+ const lmdb = require('lmdb');
14
+ const { handleHDBError, hdbErrors } = require('../errors/hdbError.js');
15
+ const envMngr = require('../environment/environmentManager.js');
16
+ envMngr.initSync();
17
+
18
+ const LMDB_PREFETCH_WRITES = envMngr.get(hdbTerms.CONFIG_PARAMS.STORAGE_PREFETCHWRITES);
19
+
20
+ const CREATED_TIME_ATTRIBUTE_NAME = hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME;
21
+ const UPDATED_TIME_ATTRIBUTE_NAME = hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;
22
+
23
+ /**
24
+ * inserts records into LMDB
25
+ * @param {lmdb.RootDatabase} env - lmdb environment object
26
+ * @param {String} hash_attribute - name of the table's hash attribute
27
+ * @param {Array.<String>} writeAttributes - list of all attributes to write to the database
28
+ * @param {Array.<Object>} records - object array records to insert
29
+ * @param {boolean|number} timestamp
30
+ * @returns {Promise<InsertRecordsResponseObject>}
31
+ */
32
+ async function insertRecords(env, hash_attribute, writeAttributes, records, timestamp = common.getNextMonotonicTime()) {
33
+ validateWrite(env, hash_attribute, writeAttributes, records);
34
+
35
+ initializeTransaction(env, hash_attribute, writeAttributes);
36
+
37
+ let result = new InsertRecordsResponseObject();
38
+
39
+ let puts = [];
40
+ let keys = [];
41
+ for (let index = 0; index < records.length; index++) {
42
+ let record = records[index];
43
+ setTimestamps(record, true, timestamp);
44
+
45
+ let promise = insertRecord(env, hash_attribute, writeAttributes, record);
46
+ let hashValue = record[hash_attribute];
47
+ puts.push(promise);
48
+ keys.push(hashValue);
49
+ }
50
+
51
+ return finalizeWrite(puts, keys, records, result, timestamp);
52
+ }
53
+
54
+ /**
55
+ *
56
+ * @param {lmdb.RootDatabase} env - lmdb environment object
57
+ * @param {String} hash_attribute - name of the table's hash attribute
58
+ * @param {Array.<String>} writeAttributes - list of all attributes to write to the database
59
+ * @param {Object} record - the record to insert
60
+ * @returns {Promise<boolean>}
61
+ */
62
+ function insertRecord(env, hash_attribute, writeAttributes, record) {
63
+ let hashValue = record[hash_attribute];
64
+ return env.dbis[hash_attribute].ifNoExists(hashValue, () => {
65
+ for (let x = 0; x < writeAttributes.length; x++) {
66
+ let attribute = writeAttributes[x];
67
+
68
+ //we do not process the write to the hash attribute as they are handled differently. Also skip if the attribute does not exist on the object
69
+ if (attribute === hash_attribute || record.hasOwnProperty(attribute) === false) {
70
+ continue;
71
+ }
72
+
73
+ let value = record[attribute];
74
+ if (typeof value === 'function') {
75
+ let valueResults = value([[{}]]);
76
+ if (Array.isArray(valueResults)) {
77
+ value = valueResults[0][hdbTerms.FUNC_VAL];
78
+ record[attribute] = value;
79
+ }
80
+ }
81
+
82
+ let values = common.getIndexedValues(value);
83
+ let dbi = env.dbis[attribute];
84
+ if (values) {
85
+ if (LMDB_PREFETCH_WRITES)
86
+ dbi.prefetch(
87
+ values.map((v) => ({ key: v, value: hashValue })),
88
+ noop
89
+ );
90
+ for (let i = 0, l = values.length; i < l; i++) {
91
+ dbi.put(values[i], hashValue);
92
+ }
93
+ }
94
+ }
95
+ if (LMDB_PREFETCH_WRITES) env.dbis[hash_attribute].prefetch([hashValue], noop);
96
+ env.dbis[hash_attribute].put(hashValue, record, record[UPDATED_TIME_ATTRIBUTE_NAME]);
97
+ });
98
+ }
99
+
100
+ /**
101
+ * removes skipped records
102
+ * @param {[{}]}records
103
+ * @param {[number]}removeIndices
104
+ */
105
+ function removeSkippedRecords(records, removeIndices = []) {
106
+ //remove the skipped entries from the records array
107
+ let offset = 0;
108
+ for (let x = 0; x < removeIndices.length; x++) {
109
+ let index = removeIndices[x];
110
+ records.splice(index - offset, 1);
111
+ //the offset needs to increase for every index we remove
112
+ offset++;
113
+ }
114
+ }
115
+
116
+ /**
117
+ * auto sets the createdtime & updatedtime stamps on a record
118
+ * @param {Object} record
119
+ * @param {Boolean} isInsert
120
+ * @param {number} timestamp - timestamp for this record (if omitted, don't set)
121
+ */
122
+ function setTimestamps(record, isInsert, timestamp) {
123
+ let generateTimestamp = timestamp > 0;
124
+ if (generateTimestamp || !Number.isInteger(record[UPDATED_TIME_ATTRIBUTE_NAME])) {
125
+ record[UPDATED_TIME_ATTRIBUTE_NAME] = timestamp || (timestamp = common.getNextMonotonicTime());
126
+ }
127
+
128
+ if (isInsert === true) {
129
+ if (generateTimestamp || !Number.isInteger(record[CREATED_TIME_ATTRIBUTE_NAME])) {
130
+ record[CREATED_TIME_ATTRIBUTE_NAME] = timestamp || common.getNextMonotonicTime();
131
+ }
132
+ } else {
133
+ delete record[CREATED_TIME_ATTRIBUTE_NAME];
134
+ }
135
+ }
136
+
137
+ /**
138
+ * makes sure all needed dbis are opened / created & starts the transaction
139
+ * @param {lmdb.RootDatabase} env - lmdb environment object
140
+ * @param {String} hash_attribute - name of the table's hash attribute
141
+ * @param {Array.<String>} writeAttributes - list of all attributes to write to the database
142
+ * @returns {*}
143
+ */
144
+ function initializeTransaction(env, hash_attribute, writeAttributes) {
145
+ //dbis must be opened / created before starting the transaction
146
+ if (writeAttributes.indexOf(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME) < 0) {
147
+ writeAttributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.CREATED_TIME);
148
+ }
149
+
150
+ if (writeAttributes.indexOf(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME) < 0) {
151
+ writeAttributes.push(hdbTerms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME);
152
+ }
153
+
154
+ environmentUtil.initializeDBIs(env, hash_attribute, writeAttributes);
155
+ }
156
+
157
+ /**
158
+ * updates records into LMDB
159
+ * @param {lmdb.RootDatabase} env - lmdb environment object
160
+ * @param {String} hash_attribute - name of the table's hash attribute
161
+ * @param {Array.<String>} writeAttributes - list of all attributes to write to the database
162
+ * @param {Array.<Object>} records - object array records to update
163
+ * @param {boolean|number} timestamp
164
+ * @returns {Promise<UpdateRecordsResponseObject>}
165
+ */
166
+ async function updateRecords(env, hash_attribute, writeAttributes, records, timestamp = common.getNextMonotonicTime()) {
167
+ //validate
168
+ validateWrite(env, hash_attribute, writeAttributes, records);
169
+
170
+ initializeTransaction(env, hash_attribute, writeAttributes);
171
+
172
+ let result = new UpdateRecordsResponseObject();
173
+
174
+ //iterate update records
175
+ let removeIndices = [];
176
+ let puts = [];
177
+ let keys = [];
178
+ for (let index = 0; index < records.length; index++) {
179
+ let record = records[index];
180
+ let hashValue = record[hash_attribute];
181
+
182
+ let promise;
183
+ try {
184
+ promise = updateUpsertRecord(env, hash_attribute, record, hashValue, result, true, timestamp);
185
+ } catch {
186
+ result.skipped_hashes.push(hashValue);
187
+ removeIndices.push(index);
188
+ continue;
189
+ }
190
+ puts.push(promise);
191
+ keys.push(hashValue);
192
+ }
193
+
194
+ return finalizeWrite(puts, keys, records, result, timestamp, removeIndices);
195
+ }
196
+
197
+ /**
198
+ * upserts records into LMDB
199
+ * @param {lmdb.RootDatabase} env - lmdb environment object
200
+ * @param {String} hash_attribute - name of the table's hash attribute
201
+ * @param {Array.<String>} writeAttributes - list of all attributes to write to the database
202
+ * @param {Array.<Object>} records - object array records to update
203
+ * @param {boolean|number} timestamp
204
+ * @returns {Promise<UpdateRecordsResponseObject>}
205
+ */
206
+ async function upsertRecords(env, hash_attribute, writeAttributes, records, timestamp = common.getNextMonotonicTime()) {
207
+ //validate
208
+ try {
209
+ validateWrite(env, hash_attribute, writeAttributes, records);
210
+ } catch (err) {
211
+ throw handleHDBError(err, err.message, hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST);
212
+ }
213
+
214
+ initializeTransaction(env, hash_attribute, writeAttributes);
215
+
216
+ let result = new UpsertRecordsResponseObject();
217
+
218
+ let puts = [];
219
+ let keys = [];
220
+ //iterate upsert records
221
+ for (let index = 0; index < records.length; index++) {
222
+ let record = records[index];
223
+ let hashValue = undefined;
224
+ if (hdbUtils.isEmpty(record[hash_attribute])) {
225
+ hashValue = uuid.v4();
226
+ record[hash_attribute] = hashValue;
227
+ } else {
228
+ hashValue = record[hash_attribute];
229
+ }
230
+
231
+ // do an upsert without requiring the record to previously existed
232
+ let promise = updateUpsertRecord(env, hash_attribute, record, hashValue, result, false, timestamp);
233
+ puts.push(promise);
234
+ keys.push(hashValue);
235
+ }
236
+
237
+ return finalizeWrite(puts, keys, records, result, timestamp);
238
+ }
239
+
240
+ async function finalizeWrite(puts, keys, records, result, timestamp, removeIndices = []) {
241
+ let putResults = await Promise.all(puts);
242
+ for (let x = 0, length = putResults.length; x < length; x++) {
243
+ if (putResults[x] === true) {
244
+ result.written_hashes.push(keys[x]);
245
+ } else {
246
+ result.skipped_hashes.push(keys[x]);
247
+ removeIndices.push(x);
248
+ }
249
+ }
250
+
251
+ result.txn_time = timestamp || common.getNextMonotonicTime();
252
+
253
+ removeSkippedRecords(records, removeIndices);
254
+ return result;
255
+ }
256
+
257
+ /**
258
+ * central function used by updateRecords & upsertRecords to write a row to lmdb
259
+ * @param {lmdb.RootDatabase} env
260
+ * @param {String} hash_attribute - name of the table's hash attribute
261
+ * @param {{}} record - the record to process
262
+ * @param {string|number} hashValue - the hash attribute value
263
+ * @param {UpdateRecordsResponseObject|UpsertRecordsResponseObject} result
264
+ * @param {boolean} Require existing record
265
+ * @param {number} timestamp
266
+ */
267
+ function updateUpsertRecord(env, hash_attribute, record, hashValue, result, mustExist = false, timestamp) {
268
+ let primaryDbi = env.dbis[hash_attribute];
269
+ let existingEntry = primaryDbi.getEntry(hashValue);
270
+ let existingRecord = existingEntry?.value;
271
+ let hadExisting = existingRecord;
272
+ if (!existingRecord) {
273
+ if (mustExist) return false;
274
+ existingRecord = {};
275
+ }
276
+ setTimestamps(record, !hadExisting, timestamp);
277
+ if (
278
+ Number.isInteger(record[UPDATED_TIME_ATTRIBUTE_NAME]) &&
279
+ existingRecord[UPDATED_TIME_ATTRIBUTE_NAME] > record[UPDATED_TIME_ATTRIBUTE_NAME]
280
+ ) {
281
+ // This is not an error condition in our world of last-record-wins
282
+ // replication. If the existing record is newer than it just means the provided record
283
+ // is, well... older. And newer records are supposed to "win" over older records, and that
284
+ // is normal, non-error behavior.
285
+ return false;
286
+ }
287
+ if (hadExisting) result.original_records.push(existingRecord);
288
+ let completion;
289
+ const doPut = () => {
290
+ // iterate the entries from the record
291
+ // for-in is about 5x as fast as for-of Object.entries, and this is extremely time sensitive since it is
292
+ // inside a write transaction
293
+ for (let key in record) {
294
+ if (!record.hasOwnProperty(key) || key === hash_attribute) {
295
+ continue;
296
+ }
297
+ let value = record[key];
298
+ let dbi = env.dbis[key];
299
+ if (dbi === undefined) {
300
+ continue;
301
+ }
302
+
303
+ let existingValue = existingRecord[key];
304
+
305
+ if (typeof value === 'function') {
306
+ let valueResults = value([[existingRecord]]);
307
+ if (Array.isArray(valueResults)) {
308
+ value = valueResults[0][hdbTerms.FUNC_VAL];
309
+ record[key] = value;
310
+ }
311
+ }
312
+ if (value === existingValue) {
313
+ continue;
314
+ }
315
+
316
+ //if the update cleared out the attribute value we need to delete it from the index
317
+ let values = common.getIndexedValues(existingValue);
318
+ if (values) {
319
+ if (LMDB_PREFETCH_WRITES)
320
+ dbi.prefetch(
321
+ values.map((v) => ({ key: v, value: hashValue })),
322
+ noop
323
+ );
324
+ for (let i = 0, l = values.length; i < l; i++) {
325
+ dbi.remove(values[i], hashValue);
326
+ }
327
+ }
328
+ values = common.getIndexedValues(value);
329
+ if (values) {
330
+ if (LMDB_PREFETCH_WRITES)
331
+ dbi.prefetch(
332
+ values.map((v) => ({ key: v, value: hashValue })),
333
+ noop
334
+ );
335
+ for (let i = 0, l = values.length; i < l; i++) {
336
+ dbi.put(values[i], hashValue);
337
+ }
338
+ }
339
+ }
340
+ // there is no point in prefetching the main record since it was already retrieved for the merge
341
+ let mergedRecord = { ...existingRecord, ...record };
342
+ primaryDbi.put(hashValue, mergedRecord, mergedRecord[UPDATED_TIME_ATTRIBUTE_NAME]);
343
+ };
344
+ // use optimistic locking to only commit if the existing record state still holds true.
345
+ // this is superior to using an async transaction since it doesn't require JS execution
346
+ // during the write transaction.
347
+ if (existingEntry) completion = primaryDbi.ifVersion(hashValue, existingEntry.version, doPut);
348
+ else completion = primaryDbi.ifNoExists(hashValue, doPut);
349
+ return completion.then((success) => {
350
+ if (!success) {
351
+ // try again
352
+ return updateUpsertRecord(env, hash_attribute, record, hashValue, result, mustExist, timestamp);
353
+ }
354
+ return true;
355
+ });
356
+ }
357
+
358
+ /**
359
+ * common validation function for env, hash_attribute & fetchAttributes
360
+ * @param {lmdb.RootDatabase} env - lmdb environment object
361
+ * @param {String} hash_attribute - name of the table's hash attribute
362
+ * @param {Array.<String>} writeAttributes - list of all attributes to write to the database
363
+ */
364
+ function validateBasic(env, hash_attribute, writeAttributes) {
365
+ common.validateEnv(env);
366
+
367
+ if (hash_attribute === undefined) {
368
+ throw new Error(LMDB_ERRORS.HASH_ATTRIBUTE_REQUIRED);
369
+ }
370
+
371
+ if (!Array.isArray(writeAttributes)) {
372
+ if (writeAttributes === undefined) {
373
+ throw new Error(LMDB_ERRORS.WRITE_ATTRIBUTES_REQUIRED);
374
+ }
375
+
376
+ throw new Error(LMDB_ERRORS.WRITE_ATTRIBUTES_MUST_BE_ARRAY);
377
+ }
378
+ }
379
+
380
+ /**
381
+ * validates the parameters for LMDB
382
+ * @param {lmdb.RootDatabase} env - lmdb environment object
383
+ * @param {String} hash_attribute - name of the table's hash attribute
384
+ * @param {Array.<String>} writeAttributes - list of all attributes to write to the database
385
+ * @param {Array.<Object>} records - object array records to insert
386
+ */
387
+ function validateWrite(env, hash_attribute, writeAttributes, records) {
388
+ validateBasic(env, hash_attribute, writeAttributes);
389
+
390
+ if (!Array.isArray(records)) {
391
+ if (records === undefined) {
392
+ throw new Error(LMDB_ERRORS.RECORDS_REQUIRED);
393
+ }
394
+
395
+ throw new Error(LMDB_ERRORS.RECORDS_MUST_BE_ARRAY);
396
+ }
397
+ }
398
+
399
+ function noop() {
400
+ // prefetch callback
401
+ }
402
+
403
+ module.exports = {
404
+ insertRecords,
405
+ updateRecords,
406
+ upsertRecords,
407
+ };